@microtronics/studio-cli 1.3.0-alpha.3 → 1.3.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +62 -49
- package/dist/studio-cli.d.ts +13 -0
- package/out/api.js +59 -46
- package/out/studio-cli.d.ts +13 -0
- package/package.json +1 -1
package/out/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var wl=Object.create;var Vt=Object.defineProperty;var Sl=Object.getOwnPropertyDescriptor;var ql=Object.getOwnPropertyNames;var Tl=Object.getPrototypeOf,$l=Object.prototype.hasOwnProperty;var Pa=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Pl=(x,A)=>{for(var r in A)Vt(x,r,{get:A[r],enumerable:!0})},Na=(x,A,r,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of ql(A))!$l.call(x,t)&&t!==r&&Vt(x,t,{get:()=>A[t],enumerable:!(e=Sl(A,t))||e.enumerable});return x};var nx=(x,A,r)=>(r=x!=null?wl(Tl(x)):{},Na(A||!x||!x.__esModule?Vt(r,"default",{value:x,enumerable:!0}):r,x)),Nl=x=>Na(Vt({},"__esModule",{value:!0}),x);var xF=Pa((Ib,Zo)=>{"use strict";var HB=Object.create,gt=Object.defineProperty,KB=Object.getOwnPropertyDescriptor,Xo=Object.getOwnPropertyNames,JB=Object.getPrototypeOf,zB=Object.prototype.hasOwnProperty,VB=(x,A,r)=>A in x?gt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:r}):x[A]=r,Ts=(x,A)=>function(){return A||(0,x[Xo(x)[0]])((A={exports:{}}).exports,A),A.exports},WB=(x,A)=>{for(var r in A)gt(x,r,{get:A[r],enumerable:!0})},Yo=(x,A,r,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Xo(A))!zB.call(x,t)&&t!==r&>(x,t,{get:()=>A[t],enumerable:!(e=KB(A,t))||e.enumerable});return x},$s=(x,A,r)=>(r=x!=null?HB(JB(x)):{},Yo(A||!x||!x.__esModule?gt(r,"default",{value:x,enumerable:!0}):r,x)),XB=x=>Yo(gt({},"__esModule",{value:!0}),x),xx=(x,A,r)=>VB(x,typeof A!="symbol"?A+"":A,r),YB=Ts({"wasm/bin/pawncc.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a,s=t,l=!!globalThis.window,E=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],j="./this.program",g=(n,o)=>{throw o};typeof __filename<"u"?e=__filename:E&&(e=self.location.href);var q="",S,P;if(D){var T=require("fs");q=__dirname+"/",P=n=>{n=k(n)?new URL(n):n;var o=T.readFileSync(n);return o},S=async(n,o=!0)=>{n=k(n)?new URL(n):n;var v=T.readFileSync(n,o?void 0:"utf8");return v},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(n,o)=>{throw process.exitCode=n,o}}else if(l||E){try{q=new URL(".",e).href}catch{}E&&(P=n=>{var o=new XMLHttpRequest;return o.open("GET",n,!1),o.responseType="arraybuffer",o.send(null),new Uint8Array(o.response)}),S=async n=>{if(k(n))return new Promise((v,B)=>{var d=new XMLHttpRequest;d.open("GET",n,!0),d.responseType="arraybuffer",d.onload=()=>{if(d.status==200||d.status==0&&d.response){v(d.response);return}B(d.status)},d.onerror=B,d.send(null)});var o=await fetch(n,{credentials:"same-origin"});if(o.ok)return o.arrayBuffer();throw new Error(o.status+" : "+o.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,v0=!1,R,k=n=>n.startsWith("file://");class O{}class V extends O{}function X(n){for(var o=0,v=n.length,B=new Uint8Array(v),d;o<v;++o)d=n.charCodeAt(o),B[o]=~d>>8&d;return B}var H,W,n0=!1,e0=!1;function x0(){var n=H0.buffer;P0=new Int8Array(n),V0=new Int16Array(n),tA=new Uint8Array(n),Nr=new Uint16Array(n),K0=new Int32Array(n),C0=new Uint32Array(n),ie=new Float32Array(n),IA=new Float64Array(n),Y0=new BigInt64Array(n),ae=new BigUint64Array(n)}function f0(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Mr(s.preRun.shift());bA(nA)}function U(){n0=!0,!s.noFSInit&&!i.initialized&&i.init(),z0.init(),F.__wasm_call_ctors(),i.ignorePermissions=!1}function F0(){}function E0(){_(),i.quit(),z0.shutdown(),e0=!0}function p0(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Ir(s.postRun.shift());bA(jA)}function b0(n){s.onAbort?.(n),n=`Aborted(${n})`,N(n),v0=!0,n+=". Build with -sASSERTIONS for more info.";var o=new WebAssembly.RuntimeError(n);throw W?.(o),o}var N0;function L0(){return X(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
|
|
2
2
|
invoke_vii\0\x07env invoke_ii\0env
|
|
3
3
|
invoke_iii\0env\binvoke_i\0\0env\vinvoke_iiii\0\benv\r__assert_fail\0 env\finvoke_viiii\0env\finvoke_iiiii\0\renv\rinvoke_viiiii\0env\finvoke_iijii\0env invoke_vi\0env\vinvoke_viii\0 env\vinvoke_iiid\0 env\rinvoke_iiiiii\0env__syscall_faccessat\0\benv__syscall_openat\0\benv__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0\bwasi_snapshot_preview1\x07fd_read\0\bwasi_snapshot_preview1\bfd_close\0\0env__syscall_getcwd\0wasi_snapshot_preview1\x07fd_seek\0env__syscall_unlinkat\0env__syscall_rmdir\0\0env__syscall_renameat\0\bwasi_snapshot_preview1clock_time_get\0env__syscall_readlinkat\0\benvemscripten_resize_heap\0\0env_emscripten_throw_longjmp\0\xAA\xA8\x07!
|
|
4
4
|
|
|
@@ -1158,8 +1158,8 @@ S\0\0\xCD\0\0Q\0\0\xCD*\0\0\x97*\0\0>S\0\0A!\0\0\f\0\0\x90\0\0\xC6\0\0l\0\
|
|
|
1158
1158
|
\0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3
|
|
1159
1159
|
\0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0A\xC0\xF9\v\xE1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0D\0\0\xFAC\0\0 D\0\0\0D\0\0\xFDC\0\0\xF6C\0\0\xEEC\0\0\xEFC\0\0D\0\0\xEBC\0\0\xE8C\0\0z\0\0\x87Y\0\0\xF3C\0\0\fD\0\0\xF7C\0\0\xF0C\0\0D\0\0\xBCC\0\0\xBDC\0\0MO\0\0\xFDN\0\0\xBCN\0\0\xBDN\0\0,D\0\0\xE3\0\0h&\0\0d-\0\0)\0\0\xA2,\0\0d\0\01\0\0>!\0\0G-\0\0_\0\0y\0\0K0\0\0\v!\0\0*\0\0\x84,\0\0\x81\0\0+\0\02\0\0g!\0\0\xF7)\0\0; \0\0-\0\0\xF01\0\0&\0\0\xAD(\0\0\xF1)\0\0\x97.\0\0\xE2\0\0\xB9-\0\0F-\0\0*\0\0
|
|
1160
1160
|
*\0\0\xDC\0\x004\0\0\xE7.\0\0*\0\x006*\0\0.*\0\0\x9D/\0\0\xB3-\0\0\x8A3\0\0\x87/\0\0'*\0\x009)\0\0!D\0\0\0O\0\0!D\0\0\xB63\0\0\xC63\0\0\x983\0\0\xA53\0\0\xD73\0\0\xAD3\0\0\xAD3\0\0\0\0\0\0/\0A\xA0\xFE\vy\0\0\0\\\\\0\0\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\xA0\x97\0\0\xA0\x9C\0\0\0\0\0\0\0\0\0 \x9C\0\0 \x9D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xA0\x9D\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\xA4\xFF\v\x9F\0A\xBC\xFF\v\v\x9D\0\0\0\x9C\0\0\0("\0A\xD4\xFF\v\0A\xE4\xFF\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA8\x80\v \x98\xBF\0\0\0\0\0\0\0A\xBC\x80\v\xA0\0A\xD4\x80\v\x9D\0\0\0\xA1\0\0\x008"\0\0\0A\xEC\x80\v\0A\xFC\x80\v\xFF\xFF\xFF\xFF
|
|
1161
|
-
\0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function cx(n){return n}async function eA(n){return n}async function NA(n,o){try{var v=await eA(n),
|
|
1162
|
-
`));if(!n)return null;Ix=EA(n,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(n,o){z0.ttys[n]={input:[],output:[],ops:o},i.registerDevice(n,z0.stream_ops)},stream_ops:{open(n){var o=z0.ttys[n.node.rdev];if(!o)throw new i.ErrnoError(43);n.tty=o,n.seekable=!1},close(n){n.tty.ops.fsync(n.tty)},fsync(n){n.tty.ops.fsync(n.tty)},read(n,o,v,E,d){if(!n.tty||!n.tty.ops.get_char)throw new i.ErrnoError(60);for(var m=0,w=0;w<E;w++){var I;try{I=n.tty.ops.get_char(n.tty)}catch{throw new i.ErrnoError(29)}if(I===void 0&&m===0)throw new i.ErrnoError(6);if(I==null)break;m++,o[v+w]=I}return m&&(n.node.atime=Date.now()),m},write(n,o,v,E,d){if(!n.tty||!n.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var m=0;m<E;m++)n.tty.ops.put_char(n.tty,o[v+m])}catch{throw new i.ErrnoError(29)}return E&&(n.node.mtime=n.node.ctime=Date.now()),m}},default_tty_ops:{get_char(n){return Fe()},put_char(n,o){o===null||o===10?(M(fA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(M(fA(n.output)),n.output=[])},ioctl_tcgets(n){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(n,o,v){return 0},ioctl_tiocgwinsz(n){return[24,80]}},default_tty1_ops:{put_char(n,o){o===null||o===10?(N(fA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(N(fA(n.output)),n.output=[])}}},BA=n=>{p0()},K={ops_table:null,mount(n){return K.createNode(null,"/",16895,0)},createNode(n,o,v,E){if(i.isBlkdev(v)||i.isFIFO(v))throw new i.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:i.chrdev_stream_ops}});var d=i.createNode(n,o,v,E);return i.isDir(d.mode)?(d.node_ops=K.ops_table.dir.node,d.stream_ops=K.ops_table.dir.stream,d.contents={}):i.isFile(d.mode)?(d.node_ops=K.ops_table.file.node,d.stream_ops=K.ops_table.file.stream,d.usedBytes=0,d.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):i.isLink(d.mode)?(d.node_ops=K.ops_table.link.node,d.stream_ops=K.ops_table.link.stream):i.isChrdev(d.mode)&&(d.node_ops=K.ops_table.chrdev.node,d.stream_ops=K.ops_table.chrdev.stream),d.atime=d.mtime=d.ctime=Date.now(),n&&(n.contents[o]=d,n.atime=n.mtime=n.ctime=d.atime),d},getFileDataAsTypedArray(n){return n.contents.subarray(0,n.usedBytes)},expandFileStorage(n,o){var v=n.contents.length;if(!(v>=o)){var E=1024*1024;o=Math.max(o,v*(v<E?2:1.125)>>>0),v&&(o=Math.max(o,256));var d=K.getFileDataAsTypedArray(n);n.contents=new Uint8Array(o),n.contents.set(d)}},resizeFileStorage(n,o){if(n.usedBytes!=o){var v=n.contents;n.contents=new Uint8Array(o),n.contents.set(v.subarray(0,Math.min(o,n.usedBytes))),n.usedBytes=o}},node_ops:{getattr(n){var o={};return o.dev=i.isChrdev(n.mode)?n.id:1,o.ino=n.id,o.mode=n.mode,o.nlink=1,o.uid=0,o.gid=0,o.rdev=n.rdev,i.isDir(n.mode)?o.size=4096:i.isFile(n.mode)?o.size=n.usedBytes:i.isLink(n.mode)?o.size=n.link.length:o.size=0,o.atime=new Date(n.atime),o.mtime=new Date(n.mtime),o.ctime=new Date(n.ctime),o.blksize=4096,o.blocks=Math.ceil(o.size/o.blksize),o},setattr(n,o){for(let v of["mode","atime","mtime","ctime"])o[v]!=null&&(n[v]=o[v]);o.size!==void 0&&K.resizeFileStorage(n,o.size)},lookup(n,o){throw K.doesNotExistError||(K.doesNotExistError=new i.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(n,o,v,E){return K.createNode(n,o,v,E)},rename(n,o,v){var E;try{E=i.lookupNode(o,v)}catch{}if(E){if(i.isDir(n.mode))for(var d in E.contents)throw new i.ErrnoError(55);i.hashRemoveNode(E)}delete n.parent.contents[n.name],o.contents[v]=n,n.name=v,o.ctime=o.mtime=n.parent.ctime=n.parent.mtime=Date.now()},unlink(n,o){delete n.contents[o],n.ctime=n.mtime=Date.now()},rmdir(n,o){var v=i.lookupNode(n,o);for(var E in v.contents)throw new i.ErrnoError(55);delete n.contents[o],n.ctime=n.mtime=Date.now()},readdir(n){return[".","..",...Object.keys(n.contents)]},symlink(n,o,v){var E=K.createNode(n,o,41471,0);return E.link=v,E},readlink(n){if(!i.isLink(n.mode))throw new i.ErrnoError(28);return n.link}},stream_ops:{read(n,o,v,E,d){var m=n.node.contents;if(d>=n.node.usedBytes)return 0;var w=Math.min(n.node.usedBytes-d,E);return o.set(m.subarray(d,d+w),v),w},write(n,o,v,E,d,m){if(o.buffer===P0.buffer&&(m=!1),!E)return 0;var w=n.node;return w.mtime=w.ctime=Date.now(),m?(w.contents=o.subarray(v,v+E),w.usedBytes=E):w.usedBytes===0&&d===0?(w.contents=o.slice(v,v+E),w.usedBytes=E):(K.expandFileStorage(w,d+E),w.contents.set(o.subarray(v,v+E),d),w.usedBytes=Math.max(w.usedBytes,d+E)),E},llseek(n,o,v){var E=o;if(v===1?E+=n.position:v===2&&i.isFile(n.node.mode)&&(E+=n.node.usedBytes),E<0)throw new i.ErrnoError(28);return E},mmap(n,o,v,E,d){if(!i.isFile(n.node.mode))throw new i.ErrnoError(43);var m,w,I=n.node.contents;if(!(d&2)&&I.buffer===P0.buffer)w=!1,m=I.byteOffset;else{if(w=!0,m=BA(o),!m)throw new i.ErrnoError(48);I&&((v>0||v+o<I.length)&&(I.subarray?I=I.subarray(v,v+o):I=Array.prototype.slice.call(I,v,v+o)),P0.set(I,m))}return{ptr:m,allocated:w}},msync(n,o,v,E,d){return K.stream_ops.write(n,o,0,E,v,!1),0}}},mA=n=>{if(typeof n!="string")return n;var o={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},v=o[n];if(typeof v>"u")throw new Error(`Unknown file open mode: ${n}`);return v},Yx=n=>(typeof n=="string"&&(n=EA(n,!0)),n.subarray||(n=new Uint8Array(n)),n),Qx=(n,o)=>{var v=0;return n&&(v|=365),o&&(v|=146),v},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(n){return j0.createNode(null,"/",n.opts.fs.lstat(n.opts.root).mode,0)},createNode(n,o,v,E){if(!i.isDir(v)&&!i.isFile(v)&&!i.isLink(v))throw new i.ErrnoError(y0.EINVAL);var d=i.createNode(n,o,v);return d.node_ops=j0.node_ops,d.stream_ops=j0.stream_ops,d},realPath(n){for(var o=[];n.parent!==n;)o.push(n.name),n=n.parent;return o.push(n.mount.opts.root),o.reverse(),a0.join(...o)},node_ops:{getattr(n){var o=j0.realPath(n),v;try{v=n.mount.opts.fs.lstat(o)}catch(E){throw E.code?new i.ErrnoError(y0[E.code]):E}return{dev:v.dev,ino:v.ino,mode:v.mode,nlink:v.nlink,uid:v.uid,gid:v.gid,rdev:v.rdev,size:v.size,atime:v.atime,mtime:v.mtime,ctime:v.ctime,blksize:v.blksize,blocks:v.blocks}},setattr(n,o){var v=j0.realPath(n);try{if(o.mode!==void 0&&(n.mount.opts.fs.chmod(v,o.mode),n.mode=o.mode),o.atime||o.mtime){var E=new Date(o.atime||o.mtime),d=new Date(o.mtime||o.atime);n.mount.opts.fs.utime(v,E,d)}o.size!==void 0&&n.mount.opts.fs.truncate(v,o.size)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},lookup(n,o){try{var v=a0.join2(j0.realPath(n),o),E=n.mount.opts.fs.lstat(v).mode,d=j0.createNode(n,o,E);return d}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},mknod(n,o,v,E){var d=j0.createNode(n,o,v,E),m=j0.realPath(d);try{i.isDir(d.mode)?d.mount.opts.fs.mkdir(m,d.mode):d.mount.opts.fs.writeFile(m,"",{mode:d.mode})}catch(w){throw w.code?new i.ErrnoError(y0[w.code]):w}return d},rename(n,o,v){var E=j0.realPath(n),d=a0.join2(j0.realPath(o),v);try{n.mount.opts.fs.rename(E,d),n.name=v}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},unlink(n,o){var v=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.unlink(v)}catch(E){throw E.code?new i.ErrnoError(y0[E.code]):E}},rmdir(n,o){var v=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.rmdir(v)}catch(E){throw E.code?new i.ErrnoError(y0[E.code]):E}},readdir(n){var o=j0.realPath(n);try{return n.mount.opts.fs.readdir(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},symlink(n,o,v){var E=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.symlink(v,E)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},readlink(n){var o=j0.realPath(n);try{return n.mount.opts.fs.readlink(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}}},stream_ops:{open(n){var o=j0.realPath(n.node);try{n.nfd=n.node.mount.opts.fs.open(o,n.flags)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},close(n){try{n.node.mount.opts.fs.close(n.nfd)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},read(n,o,v,E,d){try{return n.node.mount.opts.fs.read(n.nfd,o,v,E,d)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},write(n,o,v,E,d){try{return n.node.mount.opts.fs.write(n.nfd,o,v,E,d)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},llseek(n,o,v){var E=o;if(v===1)E+=n.position;else if(v===2&&i.isFile(n.node.mode))try{var d=n.node.node_ops.getattr(n.node);E+=d.size}catch(m){throw new i.ErrnoError(y0[m.code])}if(E<0)throw new i.ErrnoError(y0.EINVAL);return E}}},cA=async n=>{var o=await S(n);return new Uint8Array(o)},rr=(...n)=>i.createDataFile(...n),jx=n=>n,Ax=0,_0=null,er=n=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var o=_0;_0=null,o()}},Sx=n=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(n,o)=>{typeof Browser<"u"&&Browser.init();for(var v of MA)if(v.canHandle(o))return v.handle(n,o);return n},iA=async(n,o,v,E,d,m,w,I)=>{var Q=o?ix.resolve(a0.join2(n,o)):n,d0=jx(`cp ${Q}`);Sx(d0);try{var g0=v;typeof v=="string"&&(g0=await cA(v)),g0=await CA(g0,Q),I?.(),m||rr(n,o,g0,E,d,w)}finally{er(d0)}},ve=(n,o,v,E,d,m,w,I,Q,d0)=>{iA(n,o,v,E,d,I,Q,d0).then(m).catch(w)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(n){xx(this,"name","ErrnoError"),this.errno=n}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(n){this.node=n}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(n){this.shared.flags=n}get position(){return this.shared.position}set position(n){this.shared.position=n}},FSNode:class{constructor(n,o,v,E){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),n||(n=this),this.parent=n,this.mount=n.mount,this.id=i.nextInode++,this.name=o,this.mode=v,this.rdev=E,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(n){n?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(n){n?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(n,o={}){if(!n)throw new i.ErrnoError(44);o.follow_mount??(o.follow_mount=!0),a0.isAbs(n)||(n=i.cwd()+"/"+n);x:for(var v=0;v<40;v++){for(var E=n.split("/").filter(d0=>!!d0),d=i.root,m="/",w=0;w<E.length;w++){var I=w===E.length-1;if(I&&o.parent)break;if(E[w]!=="."){if(E[w]===".."){if(m=a0.dirname(m),i.isRoot(d)){n=m+"/"+E.slice(w+1).join("/"),v--;continue x}else d=d.parent;continue}m=a0.join2(m,E[w]);try{d=i.lookupNode(d,E[w])}catch(d0){if(d0?.errno===44&&I&&o.noent_okay)return{path:m};throw d0}if(i.isMountpoint(d)&&(!I||o.follow_mount)&&(d=d.mounted.root),i.isLink(d.mode)&&(!I||o.follow)){if(!d.node_ops.readlink)throw new i.ErrnoError(52);var Q=d.node_ops.readlink(d);a0.isAbs(Q)||(Q=a0.dirname(m)+"/"+Q),n=Q+"/"+E.slice(w+1).join("/");continue x}}}return{path:m,node:d}}throw new i.ErrnoError(32)},getPath(n){for(var o;;){if(i.isRoot(n)){var v=n.mount.mountpoint;return o?v[v.length-1]!=="/"?`${v}/${o}`:v+o:v}o=o?`${n.name}/${o}`:n.name,n=n.parent}},hashName(n,o){for(var v=0,E=0;E<o.length;E++)v=(v<<5)-v+o.charCodeAt(E)|0;return(n+v>>>0)%i.nameTable.length},hashAddNode(n){var o=i.hashName(n.parent.id,n.name);n.name_next=i.nameTable[o],i.nameTable[o]=n},hashRemoveNode(n){var o=i.hashName(n.parent.id,n.name);if(i.nameTable[o]===n)i.nameTable[o]=n.name_next;else for(var v=i.nameTable[o];v;){if(v.name_next===n){v.name_next=n.name_next;break}v=v.name_next}},lookupNode(n,o){var v=i.mayLookup(n);if(v)throw new i.ErrnoError(v);for(var E=i.hashName(n.id,o),d=i.nameTable[E];d;d=d.name_next){var m=d.name;if(d.parent.id===n.id&&m===o)return d}return i.lookup(n,o)},createNode(n,o,v,E){var d=new i.FSNode(n,o,v,E);return i.hashAddNode(d),d},destroyNode(n){i.hashRemoveNode(n)},isRoot(n){return n===n.parent},isMountpoint(n){return!!n.mounted},isFile(n){return(n&61440)===32768},isDir(n){return(n&61440)===16384},isLink(n){return(n&61440)===40960},isChrdev(n){return(n&61440)===8192},isBlkdev(n){return(n&61440)===24576},isFIFO(n){return(n&61440)===4096},isSocket(n){return(n&49152)===49152},flagsToPermissionString(n){var o=["r","w","rw"][n&3];return n&512&&(o+="w"),o},nodePermissions(n,o){return i.ignorePermissions?0:o.includes("r")&&!(n.mode&292)||o.includes("w")&&!(n.mode&146)||o.includes("x")&&!(n.mode&73)?2:0},mayLookup(n){if(!i.isDir(n.mode))return 54;var o=i.nodePermissions(n,"x");return o||(n.node_ops.lookup?0:2)},mayCreate(n,o){if(!i.isDir(n.mode))return 54;try{var v=i.lookupNode(n,o);return 20}catch{}return i.nodePermissions(n,"wx")},mayDelete(n,o,v){var E;try{E=i.lookupNode(n,o)}catch(m){return m.errno}var d=i.nodePermissions(n,"wx");if(d)return d;if(v){if(!i.isDir(E.mode))return 54;if(i.isRoot(E)||i.getPath(E)===i.cwd())return 10}else if(i.isDir(E.mode))return 31;return 0},mayOpen(n,o){if(!n)return 44;if(i.isLink(n.mode))return 32;var v=i.flagsToPermissionString(o);return i.isDir(n.mode)&&(v!=="r"||o&576)?31:i.nodePermissions(n,v)},checkOpExists(n,o){if(!n)throw new i.ErrnoError(o);return n},MAX_OPEN_FDS:4096,nextfd(){for(var n=0;n<=i.MAX_OPEN_FDS;n++)if(!i.streams[n])return n;throw new i.ErrnoError(33)},getStreamChecked(n){var o=i.getStream(n);if(!o)throw new i.ErrnoError(8);return o},getStream:n=>i.streams[n],createStream(n,o=-1){return n=Object.assign(new i.FSStream,n),o==-1&&(o=i.nextfd()),n.fd=o,i.streams[o]=n,n},closeStream(n){i.streams[n]=null},dupStream(n,o=-1){var v=i.createStream(n,o);return v.stream_ops?.dup?.(v),v},doSetAttr(n,o,v){var E=n?.stream_ops.setattr,d=E?n:o;E??(E=o.node_ops.setattr),i.checkOpExists(E,63);try{E(d,v)}catch(m){throw m instanceof RangeError?new i.ErrnoError(22):m}},chrdev_stream_ops:{open(n){var o=i.getDevice(n.node.rdev);n.stream_ops=o.stream_ops,n.stream_ops.open?.(n)},llseek(){throw new i.ErrnoError(70)}},major:n=>n>>8,minor:n=>n&255,makedev:(n,o)=>n<<8|o,registerDevice(n,o){i.devices[n]={stream_ops:o}},getDevice:n=>i.devices[n],getMounts(n){for(var o=[],v=[n];v.length;){var E=v.pop();o.push(E),v.push(...E.mounts)}return o},syncfs(n,o){typeof n=="function"&&(o=n,n=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var v=i.getMounts(i.root.mount),E=0;function d(I){return i.syncFSRequests--,o(I)}function m(I){if(I)return m.errored?void 0:(m.errored=!0,d(I));++E>=v.length&&d(null)}for(var w of v)w.type.syncfs?w.type.syncfs(w,n,m):m(null)},mount(n,o,v){var E=v==="/",d=!v,m;if(E&&i.root)throw new i.ErrnoError(10);if(!E&&!d){var w=i.lookupPath(v,{follow_mount:!1});if(v=w.path,m=w.node,i.isMountpoint(m))throw new i.ErrnoError(10);if(!i.isDir(m.mode))throw new i.ErrnoError(54)}var I={type:n,opts:o,mountpoint:v,mounts:[]},Q=n.mount(I);return Q.mount=I,I.root=Q,E?i.root=Q:m&&(m.mounted=I,m.mount&&m.mount.mounts.push(I)),Q},unmount(n){var o=i.lookupPath(n,{follow_mount:!1});if(!i.isMountpoint(o.node))throw new i.ErrnoError(28);var v=o.node,E=v.mounted,d=i.getMounts(E);for(var[m,w]of Object.entries(i.nameTable))for(;w;){var I=w.name_next;d.includes(w.mount)&&i.destroyNode(w),w=I}v.mounted=null;var Q=v.mount.mounts.indexOf(E);v.mount.mounts.splice(Q,1)},lookup(n,o){return n.node_ops.lookup(n,o)},mknod(n,o,v){var E=i.lookupPath(n,{parent:!0}),d=E.node,m=a0.basename(n);if(!m)throw new i.ErrnoError(28);if(m==="."||m==="..")throw new i.ErrnoError(20);var w=i.mayCreate(d,m);if(w)throw new i.ErrnoError(w);if(!d.node_ops.mknod)throw new i.ErrnoError(63);return d.node_ops.mknod(d,m,o,v)},statfs(n){return i.statfsNode(i.lookupPath(n,{follow:!0}).node)},statfsStream(n){return i.statfsNode(n.node)},statfsNode(n){var o={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return n.node_ops.statfs&&Object.assign(o,n.node_ops.statfs(n.mount.opts.root)),o},create(n,o=438){return o&=4095,o|=32768,i.mknod(n,o,0)},mkdir(n,o=511){return o&=1023,o|=16384,i.mknod(n,o,0)},mkdirTree(n,o){var v=n.split("/"),E="";for(var d of v)if(d){(E||a0.isAbs(n))&&(E+="/"),E+=d;try{i.mkdir(E,o)}catch(m){if(m.errno!=20)throw m}}},mkdev(n,o,v){return typeof v>"u"&&(v=o,o=438),o|=8192,i.mknod(n,o,v)},symlink(n,o){if(!ix.resolve(n))throw new i.ErrnoError(44);var v=i.lookupPath(o,{parent:!0}),E=v.node;if(!E)throw new i.ErrnoError(44);var d=a0.basename(o),m=i.mayCreate(E,d);if(m)throw new i.ErrnoError(m);if(!E.node_ops.symlink)throw new i.ErrnoError(63);return E.node_ops.symlink(E,d,n)},rename(n,o){var v=a0.dirname(n),E=a0.dirname(o),d=a0.basename(n),m=a0.basename(o),w,I,Q;if(w=i.lookupPath(n,{parent:!0}),I=w.node,w=i.lookupPath(o,{parent:!0}),Q=w.node,!I||!Q)throw new i.ErrnoError(44);if(I.mount!==Q.mount)throw new i.ErrnoError(75);var d0=i.lookupNode(I,d),g0=ix.relative(n,E);if(g0.charAt(0)!==".")throw new i.ErrnoError(28);if(g0=ix.relative(o,v),g0.charAt(0)!==".")throw new i.ErrnoError(55);var D0;try{D0=i.lookupNode(Q,m)}catch{}if(d0!==D0){var B0=i.isDir(d0.mode),c0=i.mayDelete(I,d,B0);if(c0)throw new i.ErrnoError(c0);if(c0=D0?i.mayDelete(Q,m,B0):i.mayCreate(Q,m),c0)throw new i.ErrnoError(c0);if(!I.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(d0)||D0&&i.isMountpoint(D0))throw new i.ErrnoError(10);if(Q!==I&&(c0=i.nodePermissions(I,"w"),c0))throw new i.ErrnoError(c0);i.hashRemoveNode(d0);try{I.node_ops.rename(d0,Q,m),d0.parent=Q}catch(I0){throw I0}finally{i.hashAddNode(d0)}}},rmdir(n){var o=i.lookupPath(n,{parent:!0}),v=o.node,E=a0.basename(n),d=i.lookupNode(v,E),m=i.mayDelete(v,E,!0);if(m)throw new i.ErrnoError(m);if(!v.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(d))throw new i.ErrnoError(10);v.node_ops.rmdir(v,E),i.destroyNode(d)},readdir(n){var o=i.lookupPath(n,{follow:!0}),v=o.node,E=i.checkOpExists(v.node_ops.readdir,54);return E(v)},unlink(n){var o=i.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new i.ErrnoError(44);var E=a0.basename(n),d=i.lookupNode(v,E),m=i.mayDelete(v,E,!1);if(m)throw new i.ErrnoError(m);if(!v.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(d))throw new i.ErrnoError(10);v.node_ops.unlink(v,E),i.destroyNode(d)},readlink(n){var o=i.lookupPath(n),v=o.node;if(!v)throw new i.ErrnoError(44);if(!v.node_ops.readlink)throw new i.ErrnoError(28);return v.node_ops.readlink(v)},stat(n,o){var v=i.lookupPath(n,{follow:!o}),E=v.node,d=i.checkOpExists(E.node_ops.getattr,63);return d(E)},fstat(n){var o=i.getStreamChecked(n),v=o.node,E=o.stream_ops.getattr,d=E?o:v;return E??(E=v.node_ops.getattr),i.checkOpExists(E,63),E(d)},lstat(n){return i.stat(n,!0)},doChmod(n,o,v,E){i.doSetAttr(n,o,{mode:v&4095|o.mode&-4096,ctime:Date.now(),dontFollow:E})},chmod(n,o,v){var E;if(typeof n=="string"){var d=i.lookupPath(n,{follow:!v});E=d.node}else E=n;i.doChmod(null,E,o,v)},lchmod(n,o){i.chmod(n,o,!0)},fchmod(n,o){var v=i.getStreamChecked(n);i.doChmod(v,v.node,o,!1)},doChown(n,o,v){i.doSetAttr(n,o,{timestamp:Date.now(),dontFollow:v})},chown(n,o,v,E){var d;if(typeof n=="string"){var m=i.lookupPath(n,{follow:!E});d=m.node}else d=n;i.doChown(null,d,E)},lchown(n,o,v){i.chown(n,o,v,!0)},fchown(n,o,v){var E=i.getStreamChecked(n);i.doChown(E,E.node,!1)},doTruncate(n,o,v){if(i.isDir(o.mode))throw new i.ErrnoError(31);if(!i.isFile(o.mode))throw new i.ErrnoError(28);var E=i.nodePermissions(o,"w");if(E)throw new i.ErrnoError(E);i.doSetAttr(n,o,{size:v,timestamp:Date.now()})},truncate(n,o){if(o<0)throw new i.ErrnoError(28);var v;if(typeof n=="string"){var E=i.lookupPath(n,{follow:!0});v=E.node}else v=n;i.doTruncate(null,v,o)},ftruncate(n,o){var v=i.getStreamChecked(n);if(o<0||(v.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(v,v.node,o)},utime(n,o,v){var E=i.lookupPath(n,{follow:!0}),d=E.node,m=i.checkOpExists(d.node_ops.setattr,63);m(d,{atime:o,mtime:v})},open(n,o,v=438){if(n==="")throw new i.ErrnoError(44);o=mA(o),o&64?v=v&4095|32768:v=0;var E,d;if(typeof n=="object")E=n;else{d=n.endsWith("/");var m=i.lookupPath(n,{follow:!(o&131072),noent_okay:!0});E=m.node,n=m.path}var w=!1;if(o&64)if(E){if(o&128)throw new i.ErrnoError(20)}else{if(d)throw new i.ErrnoError(31);E=i.mknod(n,v|511,0),w=!0}if(!E)throw new i.ErrnoError(44);if(i.isChrdev(E.mode)&&(o&=-513),o&65536&&!i.isDir(E.mode))throw new i.ErrnoError(54);if(!w){var I=i.mayOpen(E,o);if(I)throw new i.ErrnoError(I)}o&512&&!w&&i.truncate(E,0),o&=-131713;var Q=i.createStream({node:E,path:i.getPath(E),flags:o,seekable:!0,position:0,stream_ops:E.stream_ops,ungotten:[],error:!1});return Q.stream_ops.open&&Q.stream_ops.open(Q),w&&i.chmod(E,v&511),Q},close(n){if(i.isClosed(n))throw new i.ErrnoError(8);n.getdents&&(n.getdents=null);try{n.stream_ops.close&&n.stream_ops.close(n)}catch(o){throw o}finally{i.closeStream(n.fd)}n.fd=null},isClosed(n){return n.fd===null},llseek(n,o,v){if(i.isClosed(n))throw new i.ErrnoError(8);if(!n.seekable||!n.stream_ops.llseek)throw new i.ErrnoError(70);if(v!=0&&v!=1&&v!=2)throw new i.ErrnoError(28);return n.position=n.stream_ops.llseek(n,o,v),n.ungotten=[],n.position},read(n,o,v,E,d){if(E<0||d<0)throw new i.ErrnoError(28);if(i.isClosed(n))throw new i.ErrnoError(8);if((n.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(n.node.mode))throw new i.ErrnoError(31);if(!n.stream_ops.read)throw new i.ErrnoError(28);var m=typeof d<"u";if(!m)d=n.position;else if(!n.seekable)throw new i.ErrnoError(70);var w=n.stream_ops.read(n,o,v,E,d);return m||(n.position+=w),w},write(n,o,v,E,d,m){if(E<0||d<0)throw new i.ErrnoError(28);if(i.isClosed(n))throw new i.ErrnoError(8);if((n.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(n.node.mode))throw new i.ErrnoError(31);if(!n.stream_ops.write)throw new i.ErrnoError(28);n.seekable&&n.flags&1024&&i.llseek(n,0,2);var w=typeof d<"u";if(!w)d=n.position;else if(!n.seekable)throw new i.ErrnoError(70);var I=n.stream_ops.write(n,o,v,E,d,m);return w||(n.position+=I),I},mmap(n,o,v,E,d){if((E&2)!==0&&(d&2)===0&&(n.flags&2097155)!==2)throw new i.ErrnoError(2);if((n.flags&2097155)===1)throw new i.ErrnoError(2);if(!n.stream_ops.mmap)throw new i.ErrnoError(43);if(!o)throw new i.ErrnoError(28);return n.stream_ops.mmap(n,o,v,E,d)},msync(n,o,v,E,d){return n.stream_ops.msync?n.stream_ops.msync(n,o,v,E,d):0},ioctl(n,o,v){if(!n.stream_ops.ioctl)throw new i.ErrnoError(59);return n.stream_ops.ioctl(n,o,v)},readFile(n,o={}){o.flags=o.flags||0,o.encoding=o.encoding||"binary",o.encoding!=="utf8"&&o.encoding!=="binary"&&p0(`Invalid encoding type "${o.encoding}"`);var v=i.open(n,o.flags),E=i.stat(n),d=E.size,m=new Uint8Array(d);return i.read(v,m,0,d,0),o.encoding==="utf8"&&(m=fA(m)),i.close(v),m},writeFile(n,o,v={}){v.flags=v.flags||577;var E=i.open(n,v.flags,v.mode);o=Yx(o),i.write(E,o,0,o.byteLength,void 0,v.canOwn),i.close(E)},cwd:()=>i.currentPath,chdir(n){var o=i.lookupPath(n,{follow:!0});if(o.node===null)throw new i.ErrnoError(44);if(!i.isDir(o.node.mode))throw new i.ErrnoError(54);var v=i.nodePermissions(o.node,"x");if(v)throw new i.ErrnoError(v);i.currentPath=o.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(E,d,m,w,I)=>w,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var n=new Uint8Array(1024),o=0,v=()=>(o===0&&(xr(n),o=n.byteLength),n[--o]);i.createDevice("/dev","random",v),i.createDevice("/dev","urandom",v),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var n=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var o=i.createNode(n,"fd",16895,73);return o.stream_ops={llseek:K.stream_ops.llseek},o.node_ops={lookup(v,E){var d=+E,m=i.getStreamChecked(d),w={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>m.path},id:d+1};return w.parent=w,w},readdir(){return Array.from(i.streams.entries()).filter(([v,E])=>E).map(([v,E])=>v.toString())}},o}},{},"/proc/self/fd")},createStandardStreams(n,o,v){n?i.createDevice("/dev","stdin",n):i.symlink("/dev/tty","/dev/stdin"),o?i.createDevice("/dev","stdout",null,o):i.symlink("/dev/tty","/dev/stdout"),v?i.createDevice("/dev","stderr",null,v):i.symlink("/dev/tty1","/dev/stderr");var E=i.open("/dev/stdin",0),d=i.open("/dev/stdout",1),m=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(K,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:K,PROXYFS:j0}},init(n,o,v){i.initialized=!0,n??(n=s.stdin),o??(o=s.stdout),v??(v=s.stderr),i.createStandardStreams(n,o,v)},quit(){i.initialized=!1,h(0);for(var n of i.streams)n&&i.close(n)},findObject(n,o){var v=i.analyzePath(n,o);return v.exists?v.object:null},analyzePath(n,o){try{var v=i.lookupPath(n,{follow:!o});n=v.path}catch{}var E={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var v=i.lookupPath(n,{parent:!0});E.parentExists=!0,E.parentPath=v.path,E.parentObject=v.node,E.name=a0.basename(n),v=i.lookupPath(n,{follow:!o}),E.exists=!0,E.path=v.path,E.object=v.node,E.name=v.node.name,E.isRoot=v.path==="/"}catch(d){E.error=d.errno}return E},createPath(n,o,v,E){n=typeof n=="string"?n:i.getPath(n);for(var d=o.split("/").reverse();d.length;){var m=d.pop();if(m){var w=a0.join2(n,m);try{i.mkdir(w)}catch(I){if(I.errno!=20)throw I}n=w}}return w},createFile(n,o,v,E,d){var m=a0.join2(typeof n=="string"?n:i.getPath(n),o),w=Qx(E,d);return i.create(m,w)},createDataFile(n,o,v,E,d,m){var w=o;n&&(n=typeof n=="string"?n:i.getPath(n),w=o?a0.join2(n,o):n);var I=Qx(E,d),Q=i.create(w,I);if(v){v=Yx(v),i.chmod(Q,I|146);var d0=i.open(Q,577);i.write(d0,v,0,v.length,0,m),i.close(d0),i.chmod(Q,I)}},createDevice(n,o,v,E){var d,m=a0.join2(typeof n=="string"?n:i.getPath(n),o),w=Qx(!!v,!!E);(d=i.createDevice).major??(d.major=64);var I=i.makedev(i.createDevice.major++,0);return i.registerDevice(I,{open(Q){Q.seekable=!1},close(Q){E?.buffer?.length&&E(10)},read(Q,d0,g0,D0,B0){for(var c0=0,I0=0;I0<D0;I0++){var Z0;try{Z0=v()}catch{throw new i.ErrnoError(29)}if(Z0===void 0&&c0===0)throw new i.ErrnoError(6);if(Z0==null)break;c0++,d0[g0+I0]=Z0}return c0&&(Q.node.atime=Date.now()),c0},write(Q,d0,g0,D0,B0){for(var c0=0;c0<D0;c0++)try{E(d0[g0+c0])}catch{throw new i.ErrnoError(29)}return D0&&(Q.node.mtime=Q.node.ctime=Date.now()),c0}}),i.mkdev(m,w,I)},forceLoadFile(n){if(n.isDevice||n.isFolder||n.link||n.contents)return!0;if(globalThis.XMLHttpRequest)p0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{n.contents=P(n.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(n,o,v,E,d){class m{constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(B0){if(!(B0>this.length-1||B0<0)){var c0=B0%this.chunkSize,I0=B0/this.chunkSize|0;return this.getter(I0)[c0]}}setDataGetter(B0){this.getter=B0}cacheLength(){var B0=new XMLHttpRequest;B0.open("HEAD",v,!1),B0.send(null),B0.status>=200&&B0.status<300||B0.status===304||p0("Couldn't load "+v+". Status: "+B0.status);var c0=Number(B0.getResponseHeader("Content-length")),I0,Z0=(I0=B0.getResponseHeader("Accept-Ranges"))&&I0==="bytes",fx=(I0=B0.getResponseHeader("Content-Encoding"))&&I0==="gzip",dx=1024*1024;Z0||(dx=c0);var qx=(Tx,lx)=>{Tx>lx&&p0("invalid range ("+Tx+", "+lx+") or no bytes requested!"),lx>c0-1&&p0("only "+c0+" bytes available! programmer error!");var $x=new XMLHttpRequest;return $x.open("GET",v,!1),c0!==dx&&$x.setRequestHeader("Range","bytes="+Tx+"-"+lx),$x.responseType="arraybuffer",$x.overrideMimeType&&$x.overrideMimeType("text/plain; charset=x-user-defined"),$x.send(null),$x.status>=200&&$x.status<300||$x.status===304||p0("Couldn't load "+v+". Status: "+$x.status),$x.response!==void 0?new Uint8Array($x.response||[]):EA($x.responseText||"",!0)},Rx=this;Rx.setDataGetter(Tx=>{var lx=Tx*dx,$x=(Tx+1)*dx-1;return $x=Math.min($x,c0-1),typeof Rx.chunks[Tx]>"u"&&(Rx.chunks[Tx]=qx(lx,$x)),typeof Rx.chunks[Tx]>"u"&&p0("doXHR failed!"),Rx.chunks[Tx]}),(fx||!c0)&&(dx=c0=1,c0=this.getter(0).length,dx=c0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=c0,this._chunkSize=dx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){B||p0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var w=new m,I={isDevice:!1,contents:w}}else var I={isDevice:!1,url:v};var Q=i.createFile(n,o,I,E,d);I.contents?Q.contents=I.contents:I.url&&(Q.contents=null,Q.url=I.url),Object.defineProperties(Q,{usedBytes:{get:function(){return this.contents.length}}});var d0={};for(let[D0,B0]of Object.entries(Q.stream_ops))d0[D0]=(...c0)=>(i.forceLoadFile(Q),B0(...c0));function g0(D0,B0,c0,I0,Z0){var fx=D0.node.contents;if(Z0>=fx.length)return 0;var dx=Math.min(fx.length-Z0,I0);if(fx.slice)for(var qx=0;qx<dx;qx++)B0[c0+qx]=fx[Z0+qx];else for(var qx=0;qx<dx;qx++)B0[c0+qx]=fx.get(Z0+qx);return dx}return d0.read=(D0,B0,c0,I0,Z0)=>(i.forceLoadFile(Q),g0(D0,B0,c0,I0,Z0)),d0.mmap=(D0,B0,c0,I0,Z0)=>{i.forceLoadFile(Q);var fx=BA(B0);if(!fx)throw new i.ErrnoError(48);return g0(D0,P0,fx,B0,c0),{ptr:fx,allocated:!0}},Q.stream_ops=d0,Q}},h0={currentUmask:18,calculateAt(n,o,v){if(a0.isAbs(o))return o;var E;if(n===-100)E=i.cwd();else{var d=h0.getStreamFromFD(n);E=d.path}if(o.length==0){if(!v)throw new i.ErrnoError(44);return E}return E+"/"+o},writeStat(n,o){C0[n>>2]=o.dev,C0[n+4>>2]=o.mode,C0[n+8>>2]=o.nlink,C0[n+12>>2]=o.uid,C0[n+16>>2]=o.gid,C0[n+20>>2]=o.rdev,Y0[n+24>>3]=BigInt(o.size),J0[n+32>>2]=4096,J0[n+36>>2]=o.blocks;var v=o.atime.getTime(),E=o.mtime.getTime(),d=o.ctime.getTime();return Y0[n+40>>3]=BigInt(Math.floor(v/1e3)),C0[n+48>>2]=v%1e3*1e3*1e3,Y0[n+56>>3]=BigInt(Math.floor(E/1e3)),C0[n+64>>2]=E%1e3*1e3*1e3,Y0[n+72>>3]=BigInt(Math.floor(d/1e3)),C0[n+80>>2]=d%1e3*1e3*1e3,Y0[n+88>>3]=BigInt(o.ino),0},writeStatFs(n,o){C0[n+4>>2]=o.bsize,C0[n+60>>2]=o.bsize,Y0[n+8>>3]=BigInt(o.blocks),Y0[n+16>>3]=BigInt(o.bfree),Y0[n+24>>3]=BigInt(o.bavail),Y0[n+32>>3]=BigInt(o.files),Y0[n+40>>3]=BigInt(o.ffree),C0[n+48>>2]=o.fsid,C0[n+64>>2]=o.flags,C0[n+56>>2]=o.namelen},doMsync(n,o,v,E,d){if(!i.isFile(o.node.mode))throw new i.ErrnoError(43);if(E&2)return 0;var m=tA.slice(n,n+v);i.msync(o,m,d,v,E)},getStreamFromFD(n){var o=i.getStreamChecked(n);return o},varargs:void 0,getStr(n){var o=Hx(n);return o}};function br(n,o,v,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),v&-8)return-28;var d=i.lookupPath(o,{follow:!0}),m=d.node;if(!m)return-44;var w="";return v&4&&(w+="r"),v&2&&(w+="w"),v&1&&(w+="x"),w&&i.nodePermissions(m,w)?-2:0}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}var hA=()=>{var n=J0[+h0.varargs>>2];return h0.varargs+=4,n},dA=hA;function fe(n,o,v){h0.varargs=v;try{var E=h0.getStreamFromFD(n);switch(o){case 0:{var d=hA();if(d<0)return-28;for(;i.streams[d];)d++;var m;return m=i.dupStream(E,d),m.fd}case 1:case 2:return 0;case 3:return E.flags;case 4:{var d=hA(),w=289792;return E.flags=E.flags&~w|d&w,0}case 12:{var d=dA(),I=0;return V0[d+I>>1]=2,0}case 13:case 14:return 0}return-28}catch(Q){if(typeof i>"u"||Q.name!=="ErrnoError")throw Q;return-Q.errno}}var tr=(n,o,v)=>Ar(n,tA,o,v);function Lr(n,o){try{if(o===0)return-28;var v=i.cwd(),E=lA(v)+1;return o<E?-68:(tr(v,n,o),E)}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function Rr(n,o,v){h0.varargs=v;try{var E=h0.getStreamFromFD(n);switch(o){case 21509: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),m=dA();J0[m>>2]=d.c_iflag||0,J0[m+4>>2]=d.c_oflag||0,J0[m+8>>2]=d.c_cflag||0,J0[m+12>>2]=d.c_lflag||0;for(var w=0;w<32;w++)P0[m+w+17]=d.c_cc[w]||0;return 0}return 0}case 21510:case 21511:case 21512:return E.tty?0:-59;case 21506:case 21507:case 21508:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){for(var m=dA(),I=J0[m>>2],Q=J0[m+4>>2],d0=J0[m+8>>2],g0=J0[m+12>>2],D0=[],w=0;w<32;w++)D0.push(P0[m+w+17]);return E.tty.ops.ioctl_tcsets(E.tty,o,{c_iflag:I,c_oflag:Q,c_cflag:d0,c_lflag:g0,c_cc:D0})}return 0}case 21519:{if(!E.tty)return-59;var m=dA();return J0[m>>2]=0,0}case 21520:return E.tty?-28:-59;case 21537:case 21531:{var m=dA();return i.ioctl(E,o,m)}case 21523:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var B0=E.tty.ops.ioctl_tiocgwinsz(E.tty),m=dA();V0[m>>1]=B0[0],V0[m+2>>1]=B0[1]}return 0}case 21524:return E.tty?0:-59;case 21515:return E.tty?0:-59;default:return-28}}catch(c0){if(typeof i>"u"||c0.name!=="ErrnoError")throw c0;return-c0.errno}}function le(n,o,v,E){h0.varargs=E;try{o=h0.getStr(o),o=h0.calculateAt(n,o);var d=E?hA():0;return v&64&&(d&=~h0.currentUmask),i.open(o,v,d).fd}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function Ee(n,o,v,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),E<=0)return-28;var d=i.readlink(o),m=Math.min(E,lA(d)),w=P0[v+m];return tr(d,v,E+1),P0[v+m]=w,m}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function Be(n,o,v,E){try{return o=h0.getStr(o),E=h0.getStr(E),o=h0.calculateAt(n,o),E=h0.calculateAt(v,E),i.rename(o,E),0}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function nr(n){try{return n=h0.getStr(n),i.rmdir(n),0}catch(o){if(typeof i>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function Or(n,o,v){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),!v)i.unlink(o);else if(v===512)i.rmdir(o);else return-28;return 0}catch(E){if(typeof i>"u"||E.name!=="ErrnoError")throw E;return-E.errno}}var LA=()=>{throw new W},sr=()=>performance.now(),ce=()=>Date.now(),Gr=1,Ur=n=>n>=0&&n<=3,RA=9007199254740992,ir=-9007199254740992,pr=n=>n<ir||n>RA?NaN:Number(n);function Hr(n,o,v){if(o=pr(o),!Ur(n))return 28;var E;if(n===0)E=ce();else if(Gr)E=sr();else return 52;var d=Math.round(E*1e3*1e3);return Y0[v>>3]=BigInt(d),0}var Jr=()=>2147483648,Kr=(n,o)=>Math.ceil(n/o)*o,Ce=n=>{var o=H0.buffer.byteLength,v=(n-o+65535)/65536|0;try{return H0.grow(v),x0(),1}catch{}},de=n=>{var o=tA.length;n>>>=0;var v=Jr();if(n>v)return!1;for(var E=1;E<=4;E*=2){var d=o*(1+.2/E);d=Math.min(d,n+100663296);var m=Math.min(v,Kr(Math.max(n,d),65536)),w=Ce(m);if(w)return!0}return!1};function ar(n){try{var o=h0.getStreamFromFD(n);return i.close(o),0}catch(v){if(typeof i>"u"||v.name!=="ErrnoError")throw v;return v.errno}}var De=(n,o,v,E)=>{for(var d=0,m=0;m<v;m++){var w=C0[o>>2],I=C0[o+4>>2];o+=8;var Q=i.read(n,P0,w,I,E);if(Q<0)return-1;if(d+=Q,Q<I)break;typeof E<"u"&&(E+=Q)}return d};function ue(n,o,v,E){try{var d=h0.getStreamFromFD(n),m=De(d,o,v);return C0[E>>2]=m,0}catch(w){if(typeof i>"u"||w.name!=="ErrnoError")throw w;return w.errno}}function zr(n,o,v,E){o=pr(o);try{if(isNaN(o))return 22;var d=h0.getStreamFromFD(n);return i.llseek(d,o,v),Y0[E>>3]=BigInt(d.position),d.getdents&&o===0&&v===0&&(d.getdents=null),0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var Vr=(n,o,v,E)=>{for(var d=0,m=0;m<v;m++){var w=C0[o>>2],I=C0[o+4>>2];o+=8;var Q=i.write(n,P0,w,I,E);if(Q<0)return-1;if(d+=Q,Q<I)break;typeof E<"u"&&(E+=Q)}return d};function OA(n,o,v,E){try{var d=h0.getStreamFromFD(n),m=Vr(d,o,v);return C0[E>>2]=m,0}catch(w){if(typeof i>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var Wr=0,GA=()=>ZA||Wr>0,jr=n=>{L=n,GA()||(s.onExit?.(n),v0=!0),g(n,new sx(n))},Mx=(n,o)=>{L=n,GA()||E0(),jr(n)},be=n=>{if(n instanceof sx||n=="unwind")return L;g(1,n)},gA=n=>Y(n),UA=n=>{var o=lA(n)+1,v=gA(o);return tr(n,v,o),v},mr=[],mx=n=>{var o=mr[n];return o||(mr[n]=o=R0.get(n)),o},or=(...n)=>i.createPath(...n),HA=(...n)=>i.unlink(...n),f=(...n)=>i.createLazyFile(...n),c=(...n)=>i.createDevice(...n);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(ZA=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(p=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.callMain=Xr,s.addRunDependency=Sx,s.removeRunDependency=er,s.FS_preloadFile=iA,s.FS_unlink=HA,s.FS_createPath=or,s.FS_createDevice=c,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=f,s.PROXYFS=j0;var b,h,_,$,J,Y,l0,k0,Q0,H0,R0;function q0(n){b=s._main=n.__main_argc_argv,h=n.fflush,_=n.__funcs_on_exit,$=n.setThrew,J=n._emscripten_stack_restore,Y=n._emscripten_stack_alloc,l0=n.emscripten_stack_get_current,k0=H0=n.memory,Q0=R0=n.__indirect_function_table}var vx={__assert_fail:Jx,__syscall_faccessat:br,__syscall_fcntl64:fe,__syscall_getcwd:Lr,__syscall_ioctl:Rr,__syscall_openat:le,__syscall_readlinkat:Ee,__syscall_renameat:Be,__syscall_rmdir:nr,__syscall_unlinkat:Or,_emscripten_throw_longjmp:LA,clock_time_get:Hr,emscripten_resize_heap:de,fd_close:ar,fd_read:ue,fd_seek:zr,fd_write:OA,invoke_i:JA,invoke_ii:Kx,invoke_iii:zx,invoke_iiid:ft,invoke_iiii:Zx,invoke_iiiii:Cx,invoke_iiiiii:Ge,invoke_iijii:Ft,invoke_v:gx,invoke_vi:vt,invoke_vii:Lx,invoke_viii:hr,invoke_viiii:aA,invoke_viiiii:pe};function gx(n){var o=$0();try{mx(n)()}catch(v){if(ox(o),!(v instanceof O))throw v;$(1,0)}}function Lx(n,o,v){var E=$0();try{mx(n)(o,v)}catch(d){if(ox(E),!(d instanceof O))throw d;$(1,0)}}function Kx(n,o){var v=$0();try{return mx(n)(o)}catch(E){if(ox(v),!(E instanceof O))throw E;$(1,0)}}function zx(n,o,v){var E=$0();try{return mx(n)(o,v)}catch(d){if(ox(E),!(d instanceof O))throw d;$(1,0)}}function JA(n){var o=$0();try{return mx(n)()}catch(v){if(ox(o),!(v instanceof O))throw v;$(1,0)}}function Zx(n,o,v,E){var d=$0();try{return mx(n)(o,v,E)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function aA(n,o,v,E,d){var m=$0();try{mx(n)(o,v,E,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function Cx(n,o,v,E,d){var m=$0();try{return mx(n)(o,v,E,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function pe(n,o,v,E,d,m){var w=$0();try{mx(n)(o,v,E,d,m)}catch(I){if(ox(w),!(I instanceof O))throw I;$(1,0)}}function Ft(n,o,v,E,d){var m=$0();try{return mx(n)(o,v,E,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function vt(n,o){var v=$0();try{mx(n)(o)}catch(E){if(ox(v),!(E instanceof O))throw E;$(1,0)}}function hr(n,o,v,E){var d=$0();try{mx(n)(o,v,E)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function ft(n,o,v,E){var d=$0();try{return mx(n)(o,v,E)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function Ge(n,o,v,E,d,m){var w=$0();try{return mx(n)(o,v,E,d,m)}catch(I){if(ox(w),!(I instanceof O))throw I;$(1,0)}}function Xr(n=[]){var o=b;n.unshift(j);var v=n.length,E=gA((v+1)*4),d=E;for(var m of n)C0[d>>2]=UA(m),d+=4;C0[d>>2]=0;try{var w=o(v,E);return Mx(w,!0),w}catch(I){return be(I)}}function KA(n=p){if(Ax>0){_0=KA;return}if(f0(),Ax>0){_0=KA;return}function o(){if(s.calledRun=!0,!v0){U(),H?.(s),s.onRuntimeInitialized?.();var v=s.noInitialRun||!0;v||Xr(n),b0()}}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),o()},1)):o()}var F;return F=await O0(),KA(),n0?a=s:a=new Promise((n,o)=>{H=n,V=o}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),_B=Ss({"wasm/bin/pawndbg.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a,s=t,l=!!globalThis.window,B=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",p=[],j="./this.program",g=(f,c)=>{throw c};typeof __filename<"u"?e=__filename:B&&(e=self.location.href);var q="",S,P;if(D){var T=require("fs");q=__dirname+"/",P=f=>{f=k(f)?new URL(f):f;var c=T.readFileSync(f);return c},S=async(f,c=!0)=>{f=k(f)?new URL(f):f;var b=T.readFileSync(f,c?void 0:"utf8");return b},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),g=(f,c)=>{throw process.exitCode=f,c}}else if(l||B){try{q=new URL(".",e).href}catch{}B&&(P=f=>{var c=new XMLHttpRequest;return c.open("GET",f,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),S=async f=>{if(k(f))return new Promise((b,h)=>{var _=new XMLHttpRequest;_.open("GET",f,!0),_.responseType="arraybuffer",_.onload=()=>{if(_.status==200||_.status==0&&_.response){b(_.response);return}h(_.status)},_.onerror=h,_.send(null)});var c=await fetch(f,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,v0=!1,L,k=f=>f.startsWith("file://");class O{}class W extends O{}function X(f){for(var c=0,b=f.length,h=new Uint8Array(b),_;c<b;++c)_=f.charCodeAt(c),h[c]=~_>>8&_;return h}var H,V,n0=!1,e0=!1;function x0(){var f=gA.buffer;P0=new Int8Array(f),V0=new Int16Array(f),tA=new Uint8Array(f),Nr=new Uint16Array(f),J0=new Int32Array(f),C0=new Uint32Array(f),ie=new Float32Array(f),IA=new Float64Array(f),Y0=new BigInt64Array(f),ae=new BigUint64Array(f)}function f0(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Mr(s.preRun.shift());pA(nA)}function U(){n0=!0,!s.noFSInit&&!i.initialized&&i.init(),z0.init(),HA.__wasm_call_ctors(),i.ignorePermissions=!1}function F0(){}function E0(){Vr(),i.quit(),z0.shutdown(),e0=!0}function b0(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Ir(s.postRun.shift());pA(jA)}function p0(f){s.onAbort?.(f),f=`Aborted(${f})`,N(f),v0=!0,f+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(f);throw V?.(c),c}var N0;function L0(){return X(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
|
|
1161
|
+
\0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function cx(n){return n}async function eA(n){return n}async function NA(n,o){try{var v=await eA(n),B=await WebAssembly.instantiate(v,o);return B}catch(d){N(`failed to asynchronously prepare wasm: ${d}`),b0(d)}}async function Ux(n,o,v){return NA(o,v)}function U0(){var n={env:vx,wasi_snapshot_preview1:vx};return n}async function O0(){function n(m,w){return F=m.exports,q0(F),x0(),F}function o(m){return n(m.instance)}var v=U0();if(s.instantiateWasm)return new Promise((m,w)=>{s.instantiateWasm(v,(I,Q)=>{m(n(I,Q))})});N0??(N0=L0());var B=await Ux(z,N0,v),d=o(B);return d}class sx{constructor(o){xx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${o})`,this.status=o}}var V0,K0,Y0,P0,ie,IA,Nr,C0,ae,tA,bA=n=>{for(;n.length>0;)n.shift()(s)},jA=[],Ir=n=>jA.push(n),nA=[],Mr=n=>nA.push(n),ZA=!1,ox=n=>K(n),$0=()=>l0(),wx=globalThis.TextDecoder&&new TextDecoder,Fx=(n,o,v,B)=>{var d=o+v;if(B)return d;for(;n[o]&&!(o>=d);)++o;return o},fA=(n,o=0,v,B)=>{var d=Fx(n,o,v,B);if(d-o>16&&n.buffer&&wx)return wx.decode(n.subarray(o,d));for(var m="";o<d;){var w=n[o++];if(!(w&128)){m+=String.fromCharCode(w);continue}var I=n[o++]&63;if((w&224)==192){m+=String.fromCharCode((w&31)<<6|I);continue}var Q=n[o++]&63;if((w&240)==224?w=(w&15)<<12|I<<6|Q:w=(w&7)<<18|I<<12|Q<<6|n[o++]&63,w<65536)m+=String.fromCharCode(w);else{var d0=w-65536;m+=String.fromCharCode(55296|d0>>10,56320|d0&1023)}}return m},Hx=(n,o,v)=>n?fA(tA,n,o,v):"",Kx=(n,o,v,B)=>b0(`Assertion failed: ${Hx(n)}, at: `+[o?Hx(o):"unknown filename",v,B?Hx(B):"unknown function"]),a0={isAbs:n=>n.charAt(0)==="/",splitPath:n=>{var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return o.exec(n).slice(1)},normalizeArray:(n,o)=>{for(var v=0,B=n.length-1;B>=0;B--){var d=n[B];d==="."?n.splice(B,1):d===".."?(n.splice(B,1),v++):v&&(n.splice(B,1),v--)}if(o)for(;v;v--)n.unshift("..");return n},normalize:n=>{var o=a0.isAbs(n),v=n.slice(-1)==="/";return n=a0.normalizeArray(n.split("/").filter(B=>!!B),!o).join("/"),!n&&!o&&(n="."),n&&v&&(n+="/"),(o?"/":"")+n},dirname:n=>{var o=a0.splitPath(n),v=o[0],B=o[1];return!v&&!B?".":(B&&(B=B.slice(0,-1)),v+B)},basename:n=>n&&n.match(/([^\/]+|\/)\/*$/)[1],join:(...n)=>a0.normalize(n.join("/")),join2:(n,o)=>a0.normalize(n+"/"+o)},oe=()=>{if(D){var n=require("crypto");return o=>n.randomFillSync(o)}return o=>(crypto.getRandomValues(o),0)},xr=n=>(xr=oe())(n),ix={resolve:(...n)=>{for(var o="",v=!1,B=n.length-1;B>=-1&&!v;B--){var d=B>=0?n[B]:i.cwd();if(typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";o=d+"/"+o,v=a0.isAbs(d)}return o=a0.normalizeArray(o.split("/").filter(m=>!!m),!v).join("/"),(v?"/":"")+o||"."},relative:(n,o)=>{n=ix.resolve(n).slice(1),o=ix.resolve(o).slice(1);function v(d0){for(var g0=0;g0<d0.length&&d0[g0]==="";g0++);for(var D0=d0.length-1;D0>=0&&d0[D0]==="";D0--);return g0>D0?[]:d0.slice(g0,D0-g0+1)}for(var B=v(n.split("/")),d=v(o.split("/")),m=Math.min(B.length,d.length),w=m,I=0;I<m;I++)if(B[I]!==d[I]){w=I;break}for(var Q=[],I=w;I<B.length;I++)Q.push("..");return Q=Q.concat(d.slice(w)),Q.join("/")}},Ix=[],lA=n=>{for(var o=0,v=0;v<n.length;++v){var B=n.charCodeAt(v);B<=127?o++:B<=2047?o+=2:B>=55296&&B<=57343?(o+=4,++v):o+=3}return o},Ar=(n,o,v,B)=>{if(!(B>0))return 0;for(var d=v,m=v+B-1,w=0;w<n.length;++w){var I=n.codePointAt(w);if(I<=127){if(v>=m)break;o[v++]=I}else if(I<=2047){if(v+1>=m)break;o[v++]=192|I>>6,o[v++]=128|I&63}else if(I<=65535){if(v+2>=m)break;o[v++]=224|I>>12,o[v++]=128|I>>6&63,o[v++]=128|I&63}else{if(v+3>=m)break;o[v++]=240|I>>18,o[v++]=128|I>>12&63,o[v++]=128|I>>6&63,o[v++]=128|I&63,w++}}return o[v]=0,v-d},EA=(n,o,v)=>{var B=v>0?v:lA(n)+1,d=new Array(B),m=Ar(n,d,0,d.length);return o&&(d.length=m),d},Fe=()=>{if(!Ix.length){var n=null;if(D){var o=256,v=Buffer.alloc(o),B=0,d=process.stdin.fd;try{B=T.readSync(d,v,0,o)}catch(m){if(m.toString().includes("EOF"))B=0;else throw m}B>0&&(n=v.slice(0,B).toString("utf-8"))}else globalThis.window?.prompt&&(n=window.prompt("Input: "),n!==null&&(n+=`
|
|
1162
|
+
`));if(!n)return null;Ix=EA(n,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(n,o){z0.ttys[n]={input:[],output:[],ops:o},i.registerDevice(n,z0.stream_ops)},stream_ops:{open(n){var o=z0.ttys[n.node.rdev];if(!o)throw new i.ErrnoError(43);n.tty=o,n.seekable=!1},close(n){n.tty.ops.fsync(n.tty)},fsync(n){n.tty.ops.fsync(n.tty)},read(n,o,v,B,d){if(!n.tty||!n.tty.ops.get_char)throw new i.ErrnoError(60);for(var m=0,w=0;w<B;w++){var I;try{I=n.tty.ops.get_char(n.tty)}catch{throw new i.ErrnoError(29)}if(I===void 0&&m===0)throw new i.ErrnoError(6);if(I==null)break;m++,o[v+w]=I}return m&&(n.node.atime=Date.now()),m},write(n,o,v,B,d){if(!n.tty||!n.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var m=0;m<B;m++)n.tty.ops.put_char(n.tty,o[v+m])}catch{throw new i.ErrnoError(29)}return B&&(n.node.mtime=n.node.ctime=Date.now()),m}},default_tty_ops:{get_char(n){return Fe()},put_char(n,o){o===null||o===10?(M(fA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(M(fA(n.output)),n.output=[])},ioctl_tcgets(n){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(n,o,v){return 0},ioctl_tiocgwinsz(n){return[24,80]}},default_tty1_ops:{put_char(n,o){o===null||o===10?(N(fA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(N(fA(n.output)),n.output=[])}}},BA=n=>{b0()},J={ops_table:null,mount(n){return J.createNode(null,"/",16895,0)},createNode(n,o,v,B){if(i.isBlkdev(v)||i.isFIFO(v))throw new i.ErrnoError(63);J.ops_table||(J.ops_table={dir:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,lookup:J.node_ops.lookup,mknod:J.node_ops.mknod,rename:J.node_ops.rename,unlink:J.node_ops.unlink,rmdir:J.node_ops.rmdir,readdir:J.node_ops.readdir,symlink:J.node_ops.symlink},stream:{llseek:J.stream_ops.llseek}},file:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:{llseek:J.stream_ops.llseek,read:J.stream_ops.read,write:J.stream_ops.write,mmap:J.stream_ops.mmap,msync:J.stream_ops.msync}},link:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,readlink:J.node_ops.readlink},stream:{}},chrdev:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:i.chrdev_stream_ops}});var d=i.createNode(n,o,v,B);return i.isDir(d.mode)?(d.node_ops=J.ops_table.dir.node,d.stream_ops=J.ops_table.dir.stream,d.contents={}):i.isFile(d.mode)?(d.node_ops=J.ops_table.file.node,d.stream_ops=J.ops_table.file.stream,d.usedBytes=0,d.contents=J.emptyFileContents??(J.emptyFileContents=new Uint8Array(0))):i.isLink(d.mode)?(d.node_ops=J.ops_table.link.node,d.stream_ops=J.ops_table.link.stream):i.isChrdev(d.mode)&&(d.node_ops=J.ops_table.chrdev.node,d.stream_ops=J.ops_table.chrdev.stream),d.atime=d.mtime=d.ctime=Date.now(),n&&(n.contents[o]=d,n.atime=n.mtime=n.ctime=d.atime),d},getFileDataAsTypedArray(n){return n.contents.subarray(0,n.usedBytes)},expandFileStorage(n,o){var v=n.contents.length;if(!(v>=o)){var B=1024*1024;o=Math.max(o,v*(v<B?2:1.125)>>>0),v&&(o=Math.max(o,256));var d=J.getFileDataAsTypedArray(n);n.contents=new Uint8Array(o),n.contents.set(d)}},resizeFileStorage(n,o){if(n.usedBytes!=o){var v=n.contents;n.contents=new Uint8Array(o),n.contents.set(v.subarray(0,Math.min(o,n.usedBytes))),n.usedBytes=o}},node_ops:{getattr(n){var o={};return o.dev=i.isChrdev(n.mode)?n.id:1,o.ino=n.id,o.mode=n.mode,o.nlink=1,o.uid=0,o.gid=0,o.rdev=n.rdev,i.isDir(n.mode)?o.size=4096:i.isFile(n.mode)?o.size=n.usedBytes:i.isLink(n.mode)?o.size=n.link.length:o.size=0,o.atime=new Date(n.atime),o.mtime=new Date(n.mtime),o.ctime=new Date(n.ctime),o.blksize=4096,o.blocks=Math.ceil(o.size/o.blksize),o},setattr(n,o){for(let v of["mode","atime","mtime","ctime"])o[v]!=null&&(n[v]=o[v]);o.size!==void 0&&J.resizeFileStorage(n,o.size)},lookup(n,o){throw J.doesNotExistError||(J.doesNotExistError=new i.ErrnoError(44),J.doesNotExistError.stack="<generic error, no stack>"),J.doesNotExistError},mknod(n,o,v,B){return J.createNode(n,o,v,B)},rename(n,o,v){var B;try{B=i.lookupNode(o,v)}catch{}if(B){if(i.isDir(n.mode))for(var d in B.contents)throw new i.ErrnoError(55);i.hashRemoveNode(B)}delete n.parent.contents[n.name],o.contents[v]=n,n.name=v,o.ctime=o.mtime=n.parent.ctime=n.parent.mtime=Date.now()},unlink(n,o){delete n.contents[o],n.ctime=n.mtime=Date.now()},rmdir(n,o){var v=i.lookupNode(n,o);for(var B in v.contents)throw new i.ErrnoError(55);delete n.contents[o],n.ctime=n.mtime=Date.now()},readdir(n){return[".","..",...Object.keys(n.contents)]},symlink(n,o,v){var B=J.createNode(n,o,41471,0);return B.link=v,B},readlink(n){if(!i.isLink(n.mode))throw new i.ErrnoError(28);return n.link}},stream_ops:{read(n,o,v,B,d){var m=n.node.contents;if(d>=n.node.usedBytes)return 0;var w=Math.min(n.node.usedBytes-d,B);return o.set(m.subarray(d,d+w),v),w},write(n,o,v,B,d,m){if(o.buffer===P0.buffer&&(m=!1),!B)return 0;var w=n.node;return w.mtime=w.ctime=Date.now(),m?(w.contents=o.subarray(v,v+B),w.usedBytes=B):w.usedBytes===0&&d===0?(w.contents=o.slice(v,v+B),w.usedBytes=B):(J.expandFileStorage(w,d+B),w.contents.set(o.subarray(v,v+B),d),w.usedBytes=Math.max(w.usedBytes,d+B)),B},llseek(n,o,v){var B=o;if(v===1?B+=n.position:v===2&&i.isFile(n.node.mode)&&(B+=n.node.usedBytes),B<0)throw new i.ErrnoError(28);return B},mmap(n,o,v,B,d){if(!i.isFile(n.node.mode))throw new i.ErrnoError(43);var m,w,I=n.node.contents;if(!(d&2)&&I.buffer===P0.buffer)w=!1,m=I.byteOffset;else{if(w=!0,m=BA(o),!m)throw new i.ErrnoError(48);I&&((v>0||v+o<I.length)&&(I.subarray?I=I.subarray(v,v+o):I=Array.prototype.slice.call(I,v,v+o)),P0.set(I,m))}return{ptr:m,allocated:w}},msync(n,o,v,B,d){return J.stream_ops.write(n,o,0,B,v,!1),0}}},mA=n=>{if(typeof n!="string")return n;var o={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},v=o[n];if(typeof v>"u")throw new Error(`Unknown file open mode: ${n}`);return v},Yx=n=>(typeof n=="string"&&(n=EA(n,!0)),n.subarray||(n=new Uint8Array(n)),n),Qx=(n,o)=>{var v=0;return n&&(v|=365),o&&(v|=146),v},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(n){return j0.createNode(null,"/",n.opts.fs.lstat(n.opts.root).mode,0)},createNode(n,o,v,B){if(!i.isDir(v)&&!i.isFile(v)&&!i.isLink(v))throw new i.ErrnoError(y0.EINVAL);var d=i.createNode(n,o,v);return d.node_ops=j0.node_ops,d.stream_ops=j0.stream_ops,d},realPath(n){for(var o=[];n.parent!==n;)o.push(n.name),n=n.parent;return o.push(n.mount.opts.root),o.reverse(),a0.join(...o)},node_ops:{getattr(n){var o=j0.realPath(n),v;try{v=n.mount.opts.fs.lstat(o)}catch(B){throw B.code?new i.ErrnoError(y0[B.code]):B}return{dev:v.dev,ino:v.ino,mode:v.mode,nlink:v.nlink,uid:v.uid,gid:v.gid,rdev:v.rdev,size:v.size,atime:v.atime,mtime:v.mtime,ctime:v.ctime,blksize:v.blksize,blocks:v.blocks}},setattr(n,o){var v=j0.realPath(n);try{if(o.mode!==void 0&&(n.mount.opts.fs.chmod(v,o.mode),n.mode=o.mode),o.atime||o.mtime){var B=new Date(o.atime||o.mtime),d=new Date(o.mtime||o.atime);n.mount.opts.fs.utime(v,B,d)}o.size!==void 0&&n.mount.opts.fs.truncate(v,o.size)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},lookup(n,o){try{var v=a0.join2(j0.realPath(n),o),B=n.mount.opts.fs.lstat(v).mode,d=j0.createNode(n,o,B);return d}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},mknod(n,o,v,B){var d=j0.createNode(n,o,v,B),m=j0.realPath(d);try{i.isDir(d.mode)?d.mount.opts.fs.mkdir(m,d.mode):d.mount.opts.fs.writeFile(m,"",{mode:d.mode})}catch(w){throw w.code?new i.ErrnoError(y0[w.code]):w}return d},rename(n,o,v){var B=j0.realPath(n),d=a0.join2(j0.realPath(o),v);try{n.mount.opts.fs.rename(B,d),n.name=v}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},unlink(n,o){var v=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.unlink(v)}catch(B){throw B.code?new i.ErrnoError(y0[B.code]):B}},rmdir(n,o){var v=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.rmdir(v)}catch(B){throw B.code?new i.ErrnoError(y0[B.code]):B}},readdir(n){var o=j0.realPath(n);try{return n.mount.opts.fs.readdir(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},symlink(n,o,v){var B=a0.join2(j0.realPath(n),o);try{n.mount.opts.fs.symlink(v,B)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},readlink(n){var o=j0.realPath(n);try{return n.mount.opts.fs.readlink(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}}},stream_ops:{open(n){var o=j0.realPath(n.node);try{n.nfd=n.node.mount.opts.fs.open(o,n.flags)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},close(n){try{n.node.mount.opts.fs.close(n.nfd)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},read(n,o,v,B,d){try{return n.node.mount.opts.fs.read(n.nfd,o,v,B,d)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},write(n,o,v,B,d){try{return n.node.mount.opts.fs.write(n.nfd,o,v,B,d)}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}},llseek(n,o,v){var B=o;if(v===1)B+=n.position;else if(v===2&&i.isFile(n.node.mode))try{var d=n.node.node_ops.getattr(n.node);B+=d.size}catch(m){throw new i.ErrnoError(y0[m.code])}if(B<0)throw new i.ErrnoError(y0.EINVAL);return B}}},cA=async n=>{var o=await S(n);return new Uint8Array(o)},rr=(...n)=>i.createDataFile(...n),jx=n=>n,Ax=0,_0=null,er=n=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var o=_0;_0=null,o()}},Sx=n=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(n,o)=>{typeof Browser<"u"&&Browser.init();for(var v of MA)if(v.canHandle(o))return v.handle(n,o);return n},iA=async(n,o,v,B,d,m,w,I)=>{var Q=o?ix.resolve(a0.join2(n,o)):n,d0=jx(`cp ${Q}`);Sx(d0);try{var g0=v;typeof v=="string"&&(g0=await cA(v)),g0=await CA(g0,Q),I?.(),m||rr(n,o,g0,B,d,w)}finally{er(d0)}},ve=(n,o,v,B,d,m,w,I,Q,d0)=>{iA(n,o,v,B,d,I,Q,d0).then(m).catch(w)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(n){xx(this,"name","ErrnoError"),this.errno=n}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(n){this.node=n}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(n){this.shared.flags=n}get position(){return this.shared.position}set position(n){this.shared.position=n}},FSNode:class{constructor(n,o,v,B){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),n||(n=this),this.parent=n,this.mount=n.mount,this.id=i.nextInode++,this.name=o,this.mode=v,this.rdev=B,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(n){n?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(n){n?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(n,o={}){if(!n)throw new i.ErrnoError(44);o.follow_mount??(o.follow_mount=!0),a0.isAbs(n)||(n=i.cwd()+"/"+n);x:for(var v=0;v<40;v++){for(var B=n.split("/").filter(d0=>!!d0),d=i.root,m="/",w=0;w<B.length;w++){var I=w===B.length-1;if(I&&o.parent)break;if(B[w]!=="."){if(B[w]===".."){if(m=a0.dirname(m),i.isRoot(d)){n=m+"/"+B.slice(w+1).join("/"),v--;continue x}else d=d.parent;continue}m=a0.join2(m,B[w]);try{d=i.lookupNode(d,B[w])}catch(d0){if(d0?.errno===44&&I&&o.noent_okay)return{path:m};throw d0}if(i.isMountpoint(d)&&(!I||o.follow_mount)&&(d=d.mounted.root),i.isLink(d.mode)&&(!I||o.follow)){if(!d.node_ops.readlink)throw new i.ErrnoError(52);var Q=d.node_ops.readlink(d);a0.isAbs(Q)||(Q=a0.dirname(m)+"/"+Q),n=Q+"/"+B.slice(w+1).join("/");continue x}}}return{path:m,node:d}}throw new i.ErrnoError(32)},getPath(n){for(var o;;){if(i.isRoot(n)){var v=n.mount.mountpoint;return o?v[v.length-1]!=="/"?`${v}/${o}`:v+o:v}o=o?`${n.name}/${o}`:n.name,n=n.parent}},hashName(n,o){for(var v=0,B=0;B<o.length;B++)v=(v<<5)-v+o.charCodeAt(B)|0;return(n+v>>>0)%i.nameTable.length},hashAddNode(n){var o=i.hashName(n.parent.id,n.name);n.name_next=i.nameTable[o],i.nameTable[o]=n},hashRemoveNode(n){var o=i.hashName(n.parent.id,n.name);if(i.nameTable[o]===n)i.nameTable[o]=n.name_next;else for(var v=i.nameTable[o];v;){if(v.name_next===n){v.name_next=n.name_next;break}v=v.name_next}},lookupNode(n,o){var v=i.mayLookup(n);if(v)throw new i.ErrnoError(v);for(var B=i.hashName(n.id,o),d=i.nameTable[B];d;d=d.name_next){var m=d.name;if(d.parent.id===n.id&&m===o)return d}return i.lookup(n,o)},createNode(n,o,v,B){var d=new i.FSNode(n,o,v,B);return i.hashAddNode(d),d},destroyNode(n){i.hashRemoveNode(n)},isRoot(n){return n===n.parent},isMountpoint(n){return!!n.mounted},isFile(n){return(n&61440)===32768},isDir(n){return(n&61440)===16384},isLink(n){return(n&61440)===40960},isChrdev(n){return(n&61440)===8192},isBlkdev(n){return(n&61440)===24576},isFIFO(n){return(n&61440)===4096},isSocket(n){return(n&49152)===49152},flagsToPermissionString(n){var o=["r","w","rw"][n&3];return n&512&&(o+="w"),o},nodePermissions(n,o){return i.ignorePermissions?0:o.includes("r")&&!(n.mode&292)||o.includes("w")&&!(n.mode&146)||o.includes("x")&&!(n.mode&73)?2:0},mayLookup(n){if(!i.isDir(n.mode))return 54;var o=i.nodePermissions(n,"x");return o||(n.node_ops.lookup?0:2)},mayCreate(n,o){if(!i.isDir(n.mode))return 54;try{var v=i.lookupNode(n,o);return 20}catch{}return i.nodePermissions(n,"wx")},mayDelete(n,o,v){var B;try{B=i.lookupNode(n,o)}catch(m){return m.errno}var d=i.nodePermissions(n,"wx");if(d)return d;if(v){if(!i.isDir(B.mode))return 54;if(i.isRoot(B)||i.getPath(B)===i.cwd())return 10}else if(i.isDir(B.mode))return 31;return 0},mayOpen(n,o){if(!n)return 44;if(i.isLink(n.mode))return 32;var v=i.flagsToPermissionString(o);return i.isDir(n.mode)&&(v!=="r"||o&576)?31:i.nodePermissions(n,v)},checkOpExists(n,o){if(!n)throw new i.ErrnoError(o);return n},MAX_OPEN_FDS:4096,nextfd(){for(var n=0;n<=i.MAX_OPEN_FDS;n++)if(!i.streams[n])return n;throw new i.ErrnoError(33)},getStreamChecked(n){var o=i.getStream(n);if(!o)throw new i.ErrnoError(8);return o},getStream:n=>i.streams[n],createStream(n,o=-1){return n=Object.assign(new i.FSStream,n),o==-1&&(o=i.nextfd()),n.fd=o,i.streams[o]=n,n},closeStream(n){i.streams[n]=null},dupStream(n,o=-1){var v=i.createStream(n,o);return v.stream_ops?.dup?.(v),v},doSetAttr(n,o,v){var B=n?.stream_ops.setattr,d=B?n:o;B??(B=o.node_ops.setattr),i.checkOpExists(B,63);try{B(d,v)}catch(m){throw m instanceof RangeError?new i.ErrnoError(22):m}},chrdev_stream_ops:{open(n){var o=i.getDevice(n.node.rdev);n.stream_ops=o.stream_ops,n.stream_ops.open?.(n)},llseek(){throw new i.ErrnoError(70)}},major:n=>n>>8,minor:n=>n&255,makedev:(n,o)=>n<<8|o,registerDevice(n,o){i.devices[n]={stream_ops:o}},getDevice:n=>i.devices[n],getMounts(n){for(var o=[],v=[n];v.length;){var B=v.pop();o.push(B),v.push(...B.mounts)}return o},syncfs(n,o){typeof n=="function"&&(o=n,n=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var v=i.getMounts(i.root.mount),B=0;function d(I){return i.syncFSRequests--,o(I)}function m(I){if(I)return m.errored?void 0:(m.errored=!0,d(I));++B>=v.length&&d(null)}for(var w of v)w.type.syncfs?w.type.syncfs(w,n,m):m(null)},mount(n,o,v){var B=v==="/",d=!v,m;if(B&&i.root)throw new i.ErrnoError(10);if(!B&&!d){var w=i.lookupPath(v,{follow_mount:!1});if(v=w.path,m=w.node,i.isMountpoint(m))throw new i.ErrnoError(10);if(!i.isDir(m.mode))throw new i.ErrnoError(54)}var I={type:n,opts:o,mountpoint:v,mounts:[]},Q=n.mount(I);return Q.mount=I,I.root=Q,B?i.root=Q:m&&(m.mounted=I,m.mount&&m.mount.mounts.push(I)),Q},unmount(n){var o=i.lookupPath(n,{follow_mount:!1});if(!i.isMountpoint(o.node))throw new i.ErrnoError(28);var v=o.node,B=v.mounted,d=i.getMounts(B);for(var[m,w]of Object.entries(i.nameTable))for(;w;){var I=w.name_next;d.includes(w.mount)&&i.destroyNode(w),w=I}v.mounted=null;var Q=v.mount.mounts.indexOf(B);v.mount.mounts.splice(Q,1)},lookup(n,o){return n.node_ops.lookup(n,o)},mknod(n,o,v){var B=i.lookupPath(n,{parent:!0}),d=B.node,m=a0.basename(n);if(!m)throw new i.ErrnoError(28);if(m==="."||m==="..")throw new i.ErrnoError(20);var w=i.mayCreate(d,m);if(w)throw new i.ErrnoError(w);if(!d.node_ops.mknod)throw new i.ErrnoError(63);return d.node_ops.mknod(d,m,o,v)},statfs(n){return i.statfsNode(i.lookupPath(n,{follow:!0}).node)},statfsStream(n){return i.statfsNode(n.node)},statfsNode(n){var o={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return n.node_ops.statfs&&Object.assign(o,n.node_ops.statfs(n.mount.opts.root)),o},create(n,o=438){return o&=4095,o|=32768,i.mknod(n,o,0)},mkdir(n,o=511){return o&=1023,o|=16384,i.mknod(n,o,0)},mkdirTree(n,o){var v=n.split("/"),B="";for(var d of v)if(d){(B||a0.isAbs(n))&&(B+="/"),B+=d;try{i.mkdir(B,o)}catch(m){if(m.errno!=20)throw m}}},mkdev(n,o,v){return typeof v>"u"&&(v=o,o=438),o|=8192,i.mknod(n,o,v)},symlink(n,o){if(!ix.resolve(n))throw new i.ErrnoError(44);var v=i.lookupPath(o,{parent:!0}),B=v.node;if(!B)throw new i.ErrnoError(44);var d=a0.basename(o),m=i.mayCreate(B,d);if(m)throw new i.ErrnoError(m);if(!B.node_ops.symlink)throw new i.ErrnoError(63);return B.node_ops.symlink(B,d,n)},rename(n,o){var v=a0.dirname(n),B=a0.dirname(o),d=a0.basename(n),m=a0.basename(o),w,I,Q;if(w=i.lookupPath(n,{parent:!0}),I=w.node,w=i.lookupPath(o,{parent:!0}),Q=w.node,!I||!Q)throw new i.ErrnoError(44);if(I.mount!==Q.mount)throw new i.ErrnoError(75);var d0=i.lookupNode(I,d),g0=ix.relative(n,B);if(g0.charAt(0)!==".")throw new i.ErrnoError(28);if(g0=ix.relative(o,v),g0.charAt(0)!==".")throw new i.ErrnoError(55);var D0;try{D0=i.lookupNode(Q,m)}catch{}if(d0!==D0){var B0=i.isDir(d0.mode),c0=i.mayDelete(I,d,B0);if(c0)throw new i.ErrnoError(c0);if(c0=D0?i.mayDelete(Q,m,B0):i.mayCreate(Q,m),c0)throw new i.ErrnoError(c0);if(!I.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(d0)||D0&&i.isMountpoint(D0))throw new i.ErrnoError(10);if(Q!==I&&(c0=i.nodePermissions(I,"w"),c0))throw new i.ErrnoError(c0);i.hashRemoveNode(d0);try{I.node_ops.rename(d0,Q,m),d0.parent=Q}catch(I0){throw I0}finally{i.hashAddNode(d0)}}},rmdir(n){var o=i.lookupPath(n,{parent:!0}),v=o.node,B=a0.basename(n),d=i.lookupNode(v,B),m=i.mayDelete(v,B,!0);if(m)throw new i.ErrnoError(m);if(!v.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(d))throw new i.ErrnoError(10);v.node_ops.rmdir(v,B),i.destroyNode(d)},readdir(n){var o=i.lookupPath(n,{follow:!0}),v=o.node,B=i.checkOpExists(v.node_ops.readdir,54);return B(v)},unlink(n){var o=i.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new i.ErrnoError(44);var B=a0.basename(n),d=i.lookupNode(v,B),m=i.mayDelete(v,B,!1);if(m)throw new i.ErrnoError(m);if(!v.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(d))throw new i.ErrnoError(10);v.node_ops.unlink(v,B),i.destroyNode(d)},readlink(n){var o=i.lookupPath(n),v=o.node;if(!v)throw new i.ErrnoError(44);if(!v.node_ops.readlink)throw new i.ErrnoError(28);return v.node_ops.readlink(v)},stat(n,o){var v=i.lookupPath(n,{follow:!o}),B=v.node,d=i.checkOpExists(B.node_ops.getattr,63);return d(B)},fstat(n){var o=i.getStreamChecked(n),v=o.node,B=o.stream_ops.getattr,d=B?o:v;return B??(B=v.node_ops.getattr),i.checkOpExists(B,63),B(d)},lstat(n){return i.stat(n,!0)},doChmod(n,o,v,B){i.doSetAttr(n,o,{mode:v&4095|o.mode&-4096,ctime:Date.now(),dontFollow:B})},chmod(n,o,v){var B;if(typeof n=="string"){var d=i.lookupPath(n,{follow:!v});B=d.node}else B=n;i.doChmod(null,B,o,v)},lchmod(n,o){i.chmod(n,o,!0)},fchmod(n,o){var v=i.getStreamChecked(n);i.doChmod(v,v.node,o,!1)},doChown(n,o,v){i.doSetAttr(n,o,{timestamp:Date.now(),dontFollow:v})},chown(n,o,v,B){var d;if(typeof n=="string"){var m=i.lookupPath(n,{follow:!B});d=m.node}else d=n;i.doChown(null,d,B)},lchown(n,o,v){i.chown(n,o,v,!0)},fchown(n,o,v){var B=i.getStreamChecked(n);i.doChown(B,B.node,!1)},doTruncate(n,o,v){if(i.isDir(o.mode))throw new i.ErrnoError(31);if(!i.isFile(o.mode))throw new i.ErrnoError(28);var B=i.nodePermissions(o,"w");if(B)throw new i.ErrnoError(B);i.doSetAttr(n,o,{size:v,timestamp:Date.now()})},truncate(n,o){if(o<0)throw new i.ErrnoError(28);var v;if(typeof n=="string"){var B=i.lookupPath(n,{follow:!0});v=B.node}else v=n;i.doTruncate(null,v,o)},ftruncate(n,o){var v=i.getStreamChecked(n);if(o<0||(v.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(v,v.node,o)},utime(n,o,v){var B=i.lookupPath(n,{follow:!0}),d=B.node,m=i.checkOpExists(d.node_ops.setattr,63);m(d,{atime:o,mtime:v})},open(n,o,v=438){if(n==="")throw new i.ErrnoError(44);o=mA(o),o&64?v=v&4095|32768:v=0;var B,d;if(typeof n=="object")B=n;else{d=n.endsWith("/");var m=i.lookupPath(n,{follow:!(o&131072),noent_okay:!0});B=m.node,n=m.path}var w=!1;if(o&64)if(B){if(o&128)throw new i.ErrnoError(20)}else{if(d)throw new i.ErrnoError(31);B=i.mknod(n,v|511,0),w=!0}if(!B)throw new i.ErrnoError(44);if(i.isChrdev(B.mode)&&(o&=-513),o&65536&&!i.isDir(B.mode))throw new i.ErrnoError(54);if(!w){var I=i.mayOpen(B,o);if(I)throw new i.ErrnoError(I)}o&512&&!w&&i.truncate(B,0),o&=-131713;var Q=i.createStream({node:B,path:i.getPath(B),flags:o,seekable:!0,position:0,stream_ops:B.stream_ops,ungotten:[],error:!1});return Q.stream_ops.open&&Q.stream_ops.open(Q),w&&i.chmod(B,v&511),Q},close(n){if(i.isClosed(n))throw new i.ErrnoError(8);n.getdents&&(n.getdents=null);try{n.stream_ops.close&&n.stream_ops.close(n)}catch(o){throw o}finally{i.closeStream(n.fd)}n.fd=null},isClosed(n){return n.fd===null},llseek(n,o,v){if(i.isClosed(n))throw new i.ErrnoError(8);if(!n.seekable||!n.stream_ops.llseek)throw new i.ErrnoError(70);if(v!=0&&v!=1&&v!=2)throw new i.ErrnoError(28);return n.position=n.stream_ops.llseek(n,o,v),n.ungotten=[],n.position},read(n,o,v,B,d){if(B<0||d<0)throw new i.ErrnoError(28);if(i.isClosed(n))throw new i.ErrnoError(8);if((n.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(n.node.mode))throw new i.ErrnoError(31);if(!n.stream_ops.read)throw new i.ErrnoError(28);var m=typeof d<"u";if(!m)d=n.position;else if(!n.seekable)throw new i.ErrnoError(70);var w=n.stream_ops.read(n,o,v,B,d);return m||(n.position+=w),w},write(n,o,v,B,d,m){if(B<0||d<0)throw new i.ErrnoError(28);if(i.isClosed(n))throw new i.ErrnoError(8);if((n.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(n.node.mode))throw new i.ErrnoError(31);if(!n.stream_ops.write)throw new i.ErrnoError(28);n.seekable&&n.flags&1024&&i.llseek(n,0,2);var w=typeof d<"u";if(!w)d=n.position;else if(!n.seekable)throw new i.ErrnoError(70);var I=n.stream_ops.write(n,o,v,B,d,m);return w||(n.position+=I),I},mmap(n,o,v,B,d){if((B&2)!==0&&(d&2)===0&&(n.flags&2097155)!==2)throw new i.ErrnoError(2);if((n.flags&2097155)===1)throw new i.ErrnoError(2);if(!n.stream_ops.mmap)throw new i.ErrnoError(43);if(!o)throw new i.ErrnoError(28);return n.stream_ops.mmap(n,o,v,B,d)},msync(n,o,v,B,d){return n.stream_ops.msync?n.stream_ops.msync(n,o,v,B,d):0},ioctl(n,o,v){if(!n.stream_ops.ioctl)throw new i.ErrnoError(59);return n.stream_ops.ioctl(n,o,v)},readFile(n,o={}){o.flags=o.flags||0,o.encoding=o.encoding||"binary",o.encoding!=="utf8"&&o.encoding!=="binary"&&b0(`Invalid encoding type "${o.encoding}"`);var v=i.open(n,o.flags),B=i.stat(n),d=B.size,m=new Uint8Array(d);return i.read(v,m,0,d,0),o.encoding==="utf8"&&(m=fA(m)),i.close(v),m},writeFile(n,o,v={}){v.flags=v.flags||577;var B=i.open(n,v.flags,v.mode);o=Yx(o),i.write(B,o,0,o.byteLength,void 0,v.canOwn),i.close(B)},cwd:()=>i.currentPath,chdir(n){var o=i.lookupPath(n,{follow:!0});if(o.node===null)throw new i.ErrnoError(44);if(!i.isDir(o.node.mode))throw new i.ErrnoError(54);var v=i.nodePermissions(o.node,"x");if(v)throw new i.ErrnoError(v);i.currentPath=o.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(B,d,m,w,I)=>w,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var n=new Uint8Array(1024),o=0,v=()=>(o===0&&(xr(n),o=n.byteLength),n[--o]);i.createDevice("/dev","random",v),i.createDevice("/dev","urandom",v),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var n=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var o=i.createNode(n,"fd",16895,73);return o.stream_ops={llseek:J.stream_ops.llseek},o.node_ops={lookup(v,B){var d=+B,m=i.getStreamChecked(d),w={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>m.path},id:d+1};return w.parent=w,w},readdir(){return Array.from(i.streams.entries()).filter(([v,B])=>B).map(([v,B])=>v.toString())}},o}},{},"/proc/self/fd")},createStandardStreams(n,o,v){n?i.createDevice("/dev","stdin",n):i.symlink("/dev/tty","/dev/stdin"),o?i.createDevice("/dev","stdout",null,o):i.symlink("/dev/tty","/dev/stdout"),v?i.createDevice("/dev","stderr",null,v):i.symlink("/dev/tty1","/dev/stderr");var B=i.open("/dev/stdin",0),d=i.open("/dev/stdout",1),m=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(J,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:J,PROXYFS:j0}},init(n,o,v){i.initialized=!0,n??(n=s.stdin),o??(o=s.stdout),v??(v=s.stderr),i.createStandardStreams(n,o,v)},quit(){i.initialized=!1,h(0);for(var n of i.streams)n&&i.close(n)},findObject(n,o){var v=i.analyzePath(n,o);return v.exists?v.object:null},analyzePath(n,o){try{var v=i.lookupPath(n,{follow:!o});n=v.path}catch{}var B={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var v=i.lookupPath(n,{parent:!0});B.parentExists=!0,B.parentPath=v.path,B.parentObject=v.node,B.name=a0.basename(n),v=i.lookupPath(n,{follow:!o}),B.exists=!0,B.path=v.path,B.object=v.node,B.name=v.node.name,B.isRoot=v.path==="/"}catch(d){B.error=d.errno}return B},createPath(n,o,v,B){n=typeof n=="string"?n:i.getPath(n);for(var d=o.split("/").reverse();d.length;){var m=d.pop();if(m){var w=a0.join2(n,m);try{i.mkdir(w)}catch(I){if(I.errno!=20)throw I}n=w}}return w},createFile(n,o,v,B,d){var m=a0.join2(typeof n=="string"?n:i.getPath(n),o),w=Qx(B,d);return i.create(m,w)},createDataFile(n,o,v,B,d,m){var w=o;n&&(n=typeof n=="string"?n:i.getPath(n),w=o?a0.join2(n,o):n);var I=Qx(B,d),Q=i.create(w,I);if(v){v=Yx(v),i.chmod(Q,I|146);var d0=i.open(Q,577);i.write(d0,v,0,v.length,0,m),i.close(d0),i.chmod(Q,I)}},createDevice(n,o,v,B){var d,m=a0.join2(typeof n=="string"?n:i.getPath(n),o),w=Qx(!!v,!!B);(d=i.createDevice).major??(d.major=64);var I=i.makedev(i.createDevice.major++,0);return i.registerDevice(I,{open(Q){Q.seekable=!1},close(Q){B?.buffer?.length&&B(10)},read(Q,d0,g0,D0,B0){for(var c0=0,I0=0;I0<D0;I0++){var Z0;try{Z0=v()}catch{throw new i.ErrnoError(29)}if(Z0===void 0&&c0===0)throw new i.ErrnoError(6);if(Z0==null)break;c0++,d0[g0+I0]=Z0}return c0&&(Q.node.atime=Date.now()),c0},write(Q,d0,g0,D0,B0){for(var c0=0;c0<D0;c0++)try{B(d0[g0+c0])}catch{throw new i.ErrnoError(29)}return D0&&(Q.node.mtime=Q.node.ctime=Date.now()),c0}}),i.mkdev(m,w,I)},forceLoadFile(n){if(n.isDevice||n.isFolder||n.link||n.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{n.contents=P(n.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(n,o,v,B,d){class m{constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(B0){if(!(B0>this.length-1||B0<0)){var c0=B0%this.chunkSize,I0=B0/this.chunkSize|0;return this.getter(I0)[c0]}}setDataGetter(B0){this.getter=B0}cacheLength(){var B0=new XMLHttpRequest;B0.open("HEAD",v,!1),B0.send(null),B0.status>=200&&B0.status<300||B0.status===304||b0("Couldn't load "+v+". Status: "+B0.status);var c0=Number(B0.getResponseHeader("Content-length")),I0,Z0=(I0=B0.getResponseHeader("Accept-Ranges"))&&I0==="bytes",fx=(I0=B0.getResponseHeader("Content-Encoding"))&&I0==="gzip",dx=1024*1024;Z0||(dx=c0);var qx=(Tx,lx)=>{Tx>lx&&b0("invalid range ("+Tx+", "+lx+") or no bytes requested!"),lx>c0-1&&b0("only "+c0+" bytes available! programmer error!");var $x=new XMLHttpRequest;return $x.open("GET",v,!1),c0!==dx&&$x.setRequestHeader("Range","bytes="+Tx+"-"+lx),$x.responseType="arraybuffer",$x.overrideMimeType&&$x.overrideMimeType("text/plain; charset=x-user-defined"),$x.send(null),$x.status>=200&&$x.status<300||$x.status===304||b0("Couldn't load "+v+". Status: "+$x.status),$x.response!==void 0?new Uint8Array($x.response||[]):EA($x.responseText||"",!0)},Rx=this;Rx.setDataGetter(Tx=>{var lx=Tx*dx,$x=(Tx+1)*dx-1;return $x=Math.min($x,c0-1),typeof Rx.chunks[Tx]>"u"&&(Rx.chunks[Tx]=qx(lx,$x)),typeof Rx.chunks[Tx]>"u"&&b0("doXHR failed!"),Rx.chunks[Tx]}),(fx||!c0)&&(dx=c0=1,c0=this.getter(0).length,dx=c0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=c0,this._chunkSize=dx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){E||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var w=new m,I={isDevice:!1,contents:w}}else var I={isDevice:!1,url:v};var Q=i.createFile(n,o,I,B,d);I.contents?Q.contents=I.contents:I.url&&(Q.contents=null,Q.url=I.url),Object.defineProperties(Q,{usedBytes:{get:function(){return this.contents.length}}});var d0={};for(let[D0,B0]of Object.entries(Q.stream_ops))d0[D0]=(...c0)=>(i.forceLoadFile(Q),B0(...c0));function g0(D0,B0,c0,I0,Z0){var fx=D0.node.contents;if(Z0>=fx.length)return 0;var dx=Math.min(fx.length-Z0,I0);if(fx.slice)for(var qx=0;qx<dx;qx++)B0[c0+qx]=fx[Z0+qx];else for(var qx=0;qx<dx;qx++)B0[c0+qx]=fx.get(Z0+qx);return dx}return d0.read=(D0,B0,c0,I0,Z0)=>(i.forceLoadFile(Q),g0(D0,B0,c0,I0,Z0)),d0.mmap=(D0,B0,c0,I0,Z0)=>{i.forceLoadFile(Q);var fx=BA(B0);if(!fx)throw new i.ErrnoError(48);return g0(D0,P0,fx,B0,c0),{ptr:fx,allocated:!0}},Q.stream_ops=d0,Q}},h0={currentUmask:18,calculateAt(n,o,v){if(a0.isAbs(o))return o;var B;if(n===-100)B=i.cwd();else{var d=h0.getStreamFromFD(n);B=d.path}if(o.length==0){if(!v)throw new i.ErrnoError(44);return B}return B+"/"+o},writeStat(n,o){C0[n>>2]=o.dev,C0[n+4>>2]=o.mode,C0[n+8>>2]=o.nlink,C0[n+12>>2]=o.uid,C0[n+16>>2]=o.gid,C0[n+20>>2]=o.rdev,Y0[n+24>>3]=BigInt(o.size),K0[n+32>>2]=4096,K0[n+36>>2]=o.blocks;var v=o.atime.getTime(),B=o.mtime.getTime(),d=o.ctime.getTime();return Y0[n+40>>3]=BigInt(Math.floor(v/1e3)),C0[n+48>>2]=v%1e3*1e3*1e3,Y0[n+56>>3]=BigInt(Math.floor(B/1e3)),C0[n+64>>2]=B%1e3*1e3*1e3,Y0[n+72>>3]=BigInt(Math.floor(d/1e3)),C0[n+80>>2]=d%1e3*1e3*1e3,Y0[n+88>>3]=BigInt(o.ino),0},writeStatFs(n,o){C0[n+4>>2]=o.bsize,C0[n+60>>2]=o.bsize,Y0[n+8>>3]=BigInt(o.blocks),Y0[n+16>>3]=BigInt(o.bfree),Y0[n+24>>3]=BigInt(o.bavail),Y0[n+32>>3]=BigInt(o.files),Y0[n+40>>3]=BigInt(o.ffree),C0[n+48>>2]=o.fsid,C0[n+64>>2]=o.flags,C0[n+56>>2]=o.namelen},doMsync(n,o,v,B,d){if(!i.isFile(o.node.mode))throw new i.ErrnoError(43);if(B&2)return 0;var m=tA.slice(n,n+v);i.msync(o,m,d,v,B)},getStreamFromFD(n){var o=i.getStreamChecked(n);return o},varargs:void 0,getStr(n){var o=Hx(n);return o}};function pr(n,o,v,B){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),v&-8)return-28;var d=i.lookupPath(o,{follow:!0}),m=d.node;if(!m)return-44;var w="";return v&4&&(w+="r"),v&2&&(w+="w"),v&1&&(w+="x"),w&&i.nodePermissions(m,w)?-2:0}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}var hA=()=>{var n=K0[+h0.varargs>>2];return h0.varargs+=4,n},dA=hA;function fe(n,o,v){h0.varargs=v;try{var B=h0.getStreamFromFD(n);switch(o){case 0:{var d=hA();if(d<0)return-28;for(;i.streams[d];)d++;var m;return m=i.dupStream(B,d),m.fd}case 1:case 2:return 0;case 3:return B.flags;case 4:{var d=hA(),w=289792;return B.flags=B.flags&~w|d&w,0}case 12:{var d=dA(),I=0;return V0[d+I>>1]=2,0}case 13:case 14:return 0}return-28}catch(Q){if(typeof i>"u"||Q.name!=="ErrnoError")throw Q;return-Q.errno}}var tr=(n,o,v)=>Ar(n,tA,o,v);function Lr(n,o){try{if(o===0)return-28;var v=i.cwd(),B=lA(v)+1;return o<B?-68:(tr(v,n,o),B)}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function Rr(n,o,v){h0.varargs=v;try{var B=h0.getStreamFromFD(n);switch(o){case 21509:return B.tty?0:-59;case 21505:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tcgets){var d=B.tty.ops.ioctl_tcgets(B),m=dA();K0[m>>2]=d.c_iflag||0,K0[m+4>>2]=d.c_oflag||0,K0[m+8>>2]=d.c_cflag||0,K0[m+12>>2]=d.c_lflag||0;for(var w=0;w<32;w++)P0[m+w+17]=d.c_cc[w]||0;return 0}return 0}case 21510:case 21511:case 21512:return B.tty?0:-59;case 21506:case 21507:case 21508:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tcsets){for(var m=dA(),I=K0[m>>2],Q=K0[m+4>>2],d0=K0[m+8>>2],g0=K0[m+12>>2],D0=[],w=0;w<32;w++)D0.push(P0[m+w+17]);return B.tty.ops.ioctl_tcsets(B.tty,o,{c_iflag:I,c_oflag:Q,c_cflag:d0,c_lflag:g0,c_cc:D0})}return 0}case 21519:{if(!B.tty)return-59;var m=dA();return K0[m>>2]=0,0}case 21520:return B.tty?-28:-59;case 21537:case 21531:{var m=dA();return i.ioctl(B,o,m)}case 21523:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tiocgwinsz){var B0=B.tty.ops.ioctl_tiocgwinsz(B.tty),m=dA();V0[m>>1]=B0[0],V0[m+2>>1]=B0[1]}return 0}case 21524:return B.tty?0:-59;case 21515:return B.tty?0:-59;default:return-28}}catch(c0){if(typeof i>"u"||c0.name!=="ErrnoError")throw c0;return-c0.errno}}function le(n,o,v,B){h0.varargs=B;try{o=h0.getStr(o),o=h0.calculateAt(n,o);var d=B?hA():0;return v&64&&(d&=~h0.currentUmask),i.open(o,v,d).fd}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function Ee(n,o,v,B){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),B<=0)return-28;var d=i.readlink(o),m=Math.min(B,lA(d)),w=P0[v+m];return tr(d,v,B+1),P0[v+m]=w,m}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function Be(n,o,v,B){try{return o=h0.getStr(o),B=h0.getStr(B),o=h0.calculateAt(n,o),B=h0.calculateAt(v,B),i.rename(o,B),0}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function nr(n){try{return n=h0.getStr(n),i.rmdir(n),0}catch(o){if(typeof i>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function Or(n,o,v){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),!v)i.unlink(o);else if(v===512)i.rmdir(o);else return-28;return 0}catch(B){if(typeof i>"u"||B.name!=="ErrnoError")throw B;return-B.errno}}var LA=()=>{throw new V},sr=()=>performance.now(),ce=()=>Date.now(),Gr=1,Ur=n=>n>=0&&n<=3,RA=9007199254740992,ir=-9007199254740992,br=n=>n<ir||n>RA?NaN:Number(n);function Hr(n,o,v){if(o=br(o),!Ur(n))return 28;var B;if(n===0)B=ce();else if(Gr)B=sr();else return 52;var d=Math.round(B*1e3*1e3);return Y0[v>>3]=BigInt(d),0}var Kr=()=>2147483648,Jr=(n,o)=>Math.ceil(n/o)*o,Ce=n=>{var o=H0.buffer.byteLength,v=(n-o+65535)/65536|0;try{return H0.grow(v),x0(),1}catch{}},de=n=>{var o=tA.length;n>>>=0;var v=Kr();if(n>v)return!1;for(var B=1;B<=4;B*=2){var d=o*(1+.2/B);d=Math.min(d,n+100663296);var m=Math.min(v,Jr(Math.max(n,d),65536)),w=Ce(m);if(w)return!0}return!1};function ar(n){try{var o=h0.getStreamFromFD(n);return i.close(o),0}catch(v){if(typeof i>"u"||v.name!=="ErrnoError")throw v;return v.errno}}var De=(n,o,v,B)=>{for(var d=0,m=0;m<v;m++){var w=C0[o>>2],I=C0[o+4>>2];o+=8;var Q=i.read(n,P0,w,I,B);if(Q<0)return-1;if(d+=Q,Q<I)break;typeof B<"u"&&(B+=Q)}return d};function ue(n,o,v,B){try{var d=h0.getStreamFromFD(n),m=De(d,o,v);return C0[B>>2]=m,0}catch(w){if(typeof i>"u"||w.name!=="ErrnoError")throw w;return w.errno}}function zr(n,o,v,B){o=br(o);try{if(isNaN(o))return 22;var d=h0.getStreamFromFD(n);return i.llseek(d,o,v),Y0[B>>3]=BigInt(d.position),d.getdents&&o===0&&v===0&&(d.getdents=null),0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var Vr=(n,o,v,B)=>{for(var d=0,m=0;m<v;m++){var w=C0[o>>2],I=C0[o+4>>2];o+=8;var Q=i.write(n,P0,w,I,B);if(Q<0)return-1;if(d+=Q,Q<I)break;typeof B<"u"&&(B+=Q)}return d};function OA(n,o,v,B){try{var d=h0.getStreamFromFD(n),m=Vr(d,o,v);return C0[B>>2]=m,0}catch(w){if(typeof i>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var Wr=0,GA=()=>ZA||Wr>0,jr=n=>{R=n,GA()||(s.onExit?.(n),v0=!0),g(n,new sx(n))},Mx=(n,o)=>{R=n,GA()||E0(),jr(n)},pe=n=>{if(n instanceof sx||n=="unwind")return R;g(1,n)},gA=n=>Y(n),UA=n=>{var o=lA(n)+1,v=gA(o);return tr(n,v,o),v},mr=[],mx=n=>{var o=mr[n];return o||(mr[n]=o=R0.get(n)),o},or=(...n)=>i.createPath(...n),HA=(...n)=>i.unlink(...n),f=(...n)=>i.createLazyFile(...n),c=(...n)=>i.createDevice(...n);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(ZA=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(b=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.callMain=Xr,s.addRunDependency=Sx,s.removeRunDependency=er,s.FS_preloadFile=iA,s.FS_unlink=HA,s.FS_createPath=or,s.FS_createDevice=c,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=f,s.PROXYFS=j0;var p,h,_,$,K,Y,l0,k0,Q0,H0,R0;function q0(n){p=s._main=n.__main_argc_argv,h=n.fflush,_=n.__funcs_on_exit,$=n.setThrew,K=n._emscripten_stack_restore,Y=n._emscripten_stack_alloc,l0=n.emscripten_stack_get_current,k0=H0=n.memory,Q0=R0=n.__indirect_function_table}var vx={__assert_fail:Kx,__syscall_faccessat:pr,__syscall_fcntl64:fe,__syscall_getcwd:Lr,__syscall_ioctl:Rr,__syscall_openat:le,__syscall_readlinkat:Ee,__syscall_renameat:Be,__syscall_rmdir:nr,__syscall_unlinkat:Or,_emscripten_throw_longjmp:LA,clock_time_get:Hr,emscripten_resize_heap:de,fd_close:ar,fd_read:ue,fd_seek:zr,fd_write:OA,invoke_i:KA,invoke_ii:Jx,invoke_iii:zx,invoke_iiid:ft,invoke_iiii:Zx,invoke_iiiii:Cx,invoke_iiiiii:Ge,invoke_iijii:Ft,invoke_v:gx,invoke_vi:vt,invoke_vii:Lx,invoke_viii:hr,invoke_viiii:aA,invoke_viiiii:be};function gx(n){var o=$0();try{mx(n)()}catch(v){if(ox(o),!(v instanceof O))throw v;$(1,0)}}function Lx(n,o,v){var B=$0();try{mx(n)(o,v)}catch(d){if(ox(B),!(d instanceof O))throw d;$(1,0)}}function Jx(n,o){var v=$0();try{return mx(n)(o)}catch(B){if(ox(v),!(B instanceof O))throw B;$(1,0)}}function zx(n,o,v){var B=$0();try{return mx(n)(o,v)}catch(d){if(ox(B),!(d instanceof O))throw d;$(1,0)}}function KA(n){var o=$0();try{return mx(n)()}catch(v){if(ox(o),!(v instanceof O))throw v;$(1,0)}}function Zx(n,o,v,B){var d=$0();try{return mx(n)(o,v,B)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function aA(n,o,v,B,d){var m=$0();try{mx(n)(o,v,B,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function Cx(n,o,v,B,d){var m=$0();try{return mx(n)(o,v,B,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function be(n,o,v,B,d,m){var w=$0();try{mx(n)(o,v,B,d,m)}catch(I){if(ox(w),!(I instanceof O))throw I;$(1,0)}}function Ft(n,o,v,B,d){var m=$0();try{return mx(n)(o,v,B,d)}catch(w){if(ox(m),!(w instanceof O))throw w;$(1,0)}}function vt(n,o){var v=$0();try{mx(n)(o)}catch(B){if(ox(v),!(B instanceof O))throw B;$(1,0)}}function hr(n,o,v,B){var d=$0();try{mx(n)(o,v,B)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function ft(n,o,v,B){var d=$0();try{return mx(n)(o,v,B)}catch(m){if(ox(d),!(m instanceof O))throw m;$(1,0)}}function Ge(n,o,v,B,d,m){var w=$0();try{return mx(n)(o,v,B,d,m)}catch(I){if(ox(w),!(I instanceof O))throw I;$(1,0)}}function Xr(n=[]){var o=p;n.unshift(j);var v=n.length,B=gA((v+1)*4),d=B;for(var m of n)C0[d>>2]=UA(m),d+=4;C0[d>>2]=0;try{var w=o(v,B);return Mx(w,!0),w}catch(I){return pe(I)}}function JA(n=b){if(Ax>0){_0=JA;return}if(f0(),Ax>0){_0=JA;return}function o(){if(s.calledRun=!0,!v0){U(),H?.(s),s.onRuntimeInitialized?.();var v=s.noInitialRun||!0;v||Xr(n),p0()}}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),o()},1)):o()}var F;return F=await O0(),JA(),n0?a=s:a=new Promise((n,o)=>{H=n,W=o}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),QB=Ts({"wasm/bin/pawndbg.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a,s=t,l=!!globalThis.window,E=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],j="./this.program",g=(f,c)=>{throw c};typeof __filename<"u"?e=__filename:E&&(e=self.location.href);var q="",S,P;if(D){var T=require("fs");q=__dirname+"/",P=f=>{f=k(f)?new URL(f):f;var c=T.readFileSync(f);return c},S=async(f,c=!0)=>{f=k(f)?new URL(f):f;var p=T.readFileSync(f,c?void 0:"utf8");return p},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(f,c)=>{throw process.exitCode=f,c}}else if(l||E){try{q=new URL(".",e).href}catch{}E&&(P=f=>{var c=new XMLHttpRequest;return c.open("GET",f,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),S=async f=>{if(k(f))return new Promise((p,h)=>{var _=new XMLHttpRequest;_.open("GET",f,!0),_.responseType="arraybuffer",_.onload=()=>{if(_.status==200||_.status==0&&_.response){p(_.response);return}h(_.status)},_.onerror=h,_.send(null)});var c=await fetch(f,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,v0=!1,R,k=f=>f.startsWith("file://");class O{}class V extends O{}function X(f){for(var c=0,p=f.length,h=new Uint8Array(p),_;c<p;++c)_=f.charCodeAt(c),h[c]=~_>>8&_;return h}var H,W,n0=!1,e0=!1;function x0(){var f=gA.buffer;P0=new Int8Array(f),V0=new Int16Array(f),tA=new Uint8Array(f),Nr=new Uint16Array(f),K0=new Int32Array(f),C0=new Uint32Array(f),ie=new Float32Array(f),IA=new Float64Array(f),Y0=new BigInt64Array(f),ae=new BigUint64Array(f)}function f0(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Mr(s.preRun.shift());bA(nA)}function U(){n0=!0,!s.noFSInit&&!i.initialized&&i.init(),z0.init(),HA.__wasm_call_ctors(),i.ignorePermissions=!1}function F0(){}function E0(){Vr(),i.quit(),z0.shutdown(),e0=!0}function p0(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Ir(s.postRun.shift());bA(jA)}function b0(f){s.onAbort?.(f),f=`Aborted(${f})`,N(f),v0=!0,f+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(f);throw W?.(c),c}var N0;function L0(){return X(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
|
|
1163
1163
|
|
|
1164
1164
|
\0\x07\v\v\0\b\0\0 \x07\0 \0\b\0\0\f\0\0\r\0\0\x07\0\f\x1B\x07\x07\f\0\v
|
|
1165
1165
|
p\r\r\x07\x82\x80\x80\b\x7FA\x80\xAC\v\x07\xBD memory\0__wasm_call_ctors\0 __main_argc_argv\0
|
|
@@ -1523,8 +1523,8 @@ Usage: pawndbg -f <mapfile> [options]
|
|
|
1523
1523
|
\v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF
|
|
1524
1524
|
\v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0A\xC0\x1B\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0A\xE4\x1B\v\x07\0A\xFC\x1B\v
|
|
1525
1525
|
\0\0\0\0\0\0\xEC\0A\x94\v\0A\xA4\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xE8\v \xD8\r\0\0\0\0\0\0\0A\xFC\v\b\0A\x94\v\0\0\0 \0\0\0\xF8\0\0\0\0A\xAC\v\0A\xBC\v\xFF\xFF\xFF\xFF
|
|
1526
|
-
\0A\x80\v\vp\0\0D\0\0\0`)}function cx(f){return f}async function eA(f){return f}async function NA(f,c){try{var
|
|
1527
|
-
`));if(!f)return null;Ix=EA(f,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(f,c){z0.ttys[f]={input:[],output:[],ops:c},i.registerDevice(f,z0.stream_ops)},stream_ops:{open(f){var c=z0.ttys[f.node.rdev];if(!c)throw new i.ErrnoError(43);f.tty=c,f.seekable=!1},close(f){f.tty.ops.fsync(f.tty)},fsync(f){f.tty.ops.fsync(f.tty)},read(f,c,b,h,_){if(!f.tty||!f.tty.ops.get_char)throw new i.ErrnoError(60);for(var $=0,J=0;J<h;J++){var Y;try{Y=f.tty.ops.get_char(f.tty)}catch{throw new i.ErrnoError(29)}if(Y===void 0&&$===0)throw new i.ErrnoError(6);if(Y==null)break;$++,c[b+J]=Y}return $&&(f.node.atime=Date.now()),$},write(f,c,b,h,_){if(!f.tty||!f.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var $=0;$<h;$++)f.tty.ops.put_char(f.tty,c[b+$])}catch{throw new i.ErrnoError(29)}return h&&(f.node.mtime=f.node.ctime=Date.now()),$}},default_tty_ops:{get_char(f){return Fe()},put_char(f,c){c===null||c===10?(M(wx(f.output)),f.output=[]):c!=0&&f.output.push(c)},fsync(f){f.output?.length>0&&(M(wx(f.output)),f.output=[])},ioctl_tcgets(f){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(f,c,b){return 0},ioctl_tiocgwinsz(f){return[24,80]}},default_tty1_ops:{put_char(f,c){c===null||c===10?(N(wx(f.output)),f.output=[]):c!=0&&f.output.push(c)},fsync(f){f.output?.length>0&&(N(wx(f.output)),f.output=[])}}},BA=f=>{p0()},K={ops_table:null,mount(f){return K.createNode(null,"/",16895,0)},createNode(f,c,b,h){if(i.isBlkdev(b)||i.isFIFO(b))throw new i.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:i.chrdev_stream_ops}});var _=i.createNode(f,c,b,h);return i.isDir(_.mode)?(_.node_ops=K.ops_table.dir.node,_.stream_ops=K.ops_table.dir.stream,_.contents={}):i.isFile(_.mode)?(_.node_ops=K.ops_table.file.node,_.stream_ops=K.ops_table.file.stream,_.usedBytes=0,_.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):i.isLink(_.mode)?(_.node_ops=K.ops_table.link.node,_.stream_ops=K.ops_table.link.stream):i.isChrdev(_.mode)&&(_.node_ops=K.ops_table.chrdev.node,_.stream_ops=K.ops_table.chrdev.stream),_.atime=_.mtime=_.ctime=Date.now(),f&&(f.contents[c]=_,f.atime=f.mtime=f.ctime=_.atime),_},getFileDataAsTypedArray(f){return f.contents.subarray(0,f.usedBytes)},expandFileStorage(f,c){var b=f.contents.length;if(!(b>=c)){var h=1024*1024;c=Math.max(c,b*(b<h?2:1.125)>>>0),b&&(c=Math.max(c,256));var _=K.getFileDataAsTypedArray(f);f.contents=new Uint8Array(c),f.contents.set(_)}},resizeFileStorage(f,c){if(f.usedBytes!=c){var b=f.contents;f.contents=new Uint8Array(c),f.contents.set(b.subarray(0,Math.min(c,f.usedBytes))),f.usedBytes=c}},node_ops:{getattr(f){var c={};return c.dev=i.isChrdev(f.mode)?f.id:1,c.ino=f.id,c.mode=f.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=f.rdev,i.isDir(f.mode)?c.size=4096:i.isFile(f.mode)?c.size=f.usedBytes:i.isLink(f.mode)?c.size=f.link.length:c.size=0,c.atime=new Date(f.atime),c.mtime=new Date(f.mtime),c.ctime=new Date(f.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(f,c){for(let b of["mode","atime","mtime","ctime"])c[b]!=null&&(f[b]=c[b]);c.size!==void 0&&K.resizeFileStorage(f,c.size)},lookup(f,c){throw K.doesNotExistError||(K.doesNotExistError=new i.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(f,c,b,h){return K.createNode(f,c,b,h)},rename(f,c,b){var h;try{h=i.lookupNode(c,b)}catch{}if(h){if(i.isDir(f.mode))for(var _ in h.contents)throw new i.ErrnoError(55);i.hashRemoveNode(h)}delete f.parent.contents[f.name],c.contents[b]=f,f.name=b,c.ctime=c.mtime=f.parent.ctime=f.parent.mtime=Date.now()},unlink(f,c){delete f.contents[c],f.ctime=f.mtime=Date.now()},rmdir(f,c){var b=i.lookupNode(f,c);for(var h in b.contents)throw new i.ErrnoError(55);delete f.contents[c],f.ctime=f.mtime=Date.now()},readdir(f){return[".","..",...Object.keys(f.contents)]},symlink(f,c,b){var h=K.createNode(f,c,41471,0);return h.link=b,h},readlink(f){if(!i.isLink(f.mode))throw new i.ErrnoError(28);return f.link}},stream_ops:{read(f,c,b,h,_){var $=f.node.contents;if(_>=f.node.usedBytes)return 0;var J=Math.min(f.node.usedBytes-_,h);return c.set($.subarray(_,_+J),b),J},write(f,c,b,h,_,$){if(c.buffer===P0.buffer&&($=!1),!h)return 0;var J=f.node;return J.mtime=J.ctime=Date.now(),$?(J.contents=c.subarray(b,b+h),J.usedBytes=h):J.usedBytes===0&&_===0?(J.contents=c.slice(b,b+h),J.usedBytes=h):(K.expandFileStorage(J,_+h),J.contents.set(c.subarray(b,b+h),_),J.usedBytes=Math.max(J.usedBytes,_+h)),h},llseek(f,c,b){var h=c;if(b===1?h+=f.position:b===2&&i.isFile(f.node.mode)&&(h+=f.node.usedBytes),h<0)throw new i.ErrnoError(28);return h},mmap(f,c,b,h,_){if(!i.isFile(f.node.mode))throw new i.ErrnoError(43);var $,J,Y=f.node.contents;if(!(_&2)&&Y.buffer===P0.buffer)J=!1,$=Y.byteOffset;else{if(J=!0,$=BA(c),!$)throw new i.ErrnoError(48);Y&&((b>0||b+c<Y.length)&&(Y.subarray?Y=Y.subarray(b,b+c):Y=Array.prototype.slice.call(Y,b,b+c)),P0.set(Y,$))}return{ptr:$,allocated:J}},msync(f,c,b,h,_){return K.stream_ops.write(f,c,0,h,b,!1),0}}},mA=f=>{if(typeof f!="string")return f;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},b=c[f];if(typeof b>"u")throw new Error(`Unknown file open mode: ${f}`);return b},Yx=f=>(typeof f=="string"&&(f=EA(f,!0)),f.subarray||(f=new Uint8Array(f)),f),Qx=(f,c)=>{var b=0;return f&&(b|=365),c&&(b|=146),b},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(f){return j0.createNode(null,"/",f.opts.fs.lstat(f.opts.root).mode,0)},createNode(f,c,b,h){if(!i.isDir(b)&&!i.isFile(b)&&!i.isLink(b))throw new i.ErrnoError(y0.EINVAL);var _=i.createNode(f,c,b);return _.node_ops=j0.node_ops,_.stream_ops=j0.stream_ops,_},realPath(f){for(var c=[];f.parent!==f;)c.push(f.name),f=f.parent;return c.push(f.mount.opts.root),c.reverse(),a0.join(...c)},node_ops:{getattr(f){var c=j0.realPath(f),b;try{b=f.mount.opts.fs.lstat(c)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,blksize:b.blksize,blocks:b.blocks}},setattr(f,c){var b=j0.realPath(f);try{if(c.mode!==void 0&&(f.mount.opts.fs.chmod(b,c.mode),f.mode=c.mode),c.atime||c.mtime){var h=new Date(c.atime||c.mtime),_=new Date(c.mtime||c.atime);f.mount.opts.fs.utime(b,h,_)}c.size!==void 0&&f.mount.opts.fs.truncate(b,c.size)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},lookup(f,c){try{var b=a0.join2(j0.realPath(f),c),h=f.mount.opts.fs.lstat(b).mode,_=j0.createNode(f,c,h);return _}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},mknod(f,c,b,h){var _=j0.createNode(f,c,b,h),$=j0.realPath(_);try{i.isDir(_.mode)?_.mount.opts.fs.mkdir($,_.mode):_.mount.opts.fs.writeFile($,"",{mode:_.mode})}catch(J){throw J.code?new i.ErrnoError(y0[J.code]):J}return _},rename(f,c,b){var h=j0.realPath(f),_=a0.join2(j0.realPath(c),b);try{f.mount.opts.fs.rename(h,_),f.name=b}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},unlink(f,c){var b=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.unlink(b)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}},rmdir(f,c){var b=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.rmdir(b)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}},readdir(f){var c=j0.realPath(f);try{return f.mount.opts.fs.readdir(c)}catch(b){throw b.code?new i.ErrnoError(y0[b.code]):b}},symlink(f,c,b){var h=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.symlink(b,h)}catch(_){throw _.code?new i.ErrnoError(y0[_.code]):_}},readlink(f){var c=j0.realPath(f);try{return f.mount.opts.fs.readlink(c)}catch(b){throw b.code?new i.ErrnoError(y0[b.code]):b}}},stream_ops:{open(f){var c=j0.realPath(f.node);try{f.nfd=f.node.mount.opts.fs.open(c,f.flags)}catch(b){throw b.code?new i.ErrnoError(y0[b.code]):b}},close(f){try{f.node.mount.opts.fs.close(f.nfd)}catch(c){throw c.code?new i.ErrnoError(y0[c.code]):c}},read(f,c,b,h,_){try{return f.node.mount.opts.fs.read(f.nfd,c,b,h,_)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},write(f,c,b,h,_){try{return f.node.mount.opts.fs.write(f.nfd,c,b,h,_)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},llseek(f,c,b){var h=c;if(b===1)h+=f.position;else if(b===2&&i.isFile(f.node.mode))try{var _=f.node.node_ops.getattr(f.node);h+=_.size}catch($){throw new i.ErrnoError(y0[$.code])}if(h<0)throw new i.ErrnoError(y0.EINVAL);return h}}},cA=async f=>{var c=await S(f);return new Uint8Array(c)},rr=(...f)=>i.createDataFile(...f),jx=f=>f,Ax=0,_0=null,er=f=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var c=_0;_0=null,c()}},Sx=f=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(f,c)=>{typeof Browser<"u"&&Browser.init();for(var b of MA)if(b.canHandle(c))return b.handle(f,c);return f},iA=async(f,c,b,h,_,$,J,Y)=>{var l0=c?ix.resolve(a0.join2(f,c)):f,k0=jx(`cp ${l0}`);Sx(k0);try{var Q0=b;typeof b=="string"&&(Q0=await cA(b)),Q0=await CA(Q0,l0),Y?.(),$||rr(f,c,Q0,h,_,J)}finally{er(k0)}},ve=(f,c,b,h,_,$,J,Y,l0,k0)=>{iA(f,c,b,h,_,Y,l0,k0).then($).catch(J)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(f){xx(this,"name","ErrnoError"),this.errno=f}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(f){this.node=f}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(f){this.shared.flags=f}get position(){return this.shared.position}set position(f){this.shared.position=f}},FSNode:class{constructor(f,c,b,h){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),f||(f=this),this.parent=f,this.mount=f.mount,this.id=i.nextInode++,this.name=c,this.mode=b,this.rdev=h,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(f){f?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(f){f?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(f,c={}){if(!f)throw new i.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),a0.isAbs(f)||(f=i.cwd()+"/"+f);x:for(var b=0;b<40;b++){for(var h=f.split("/").filter(k0=>!!k0),_=i.root,$="/",J=0;J<h.length;J++){var Y=J===h.length-1;if(Y&&c.parent)break;if(h[J]!=="."){if(h[J]===".."){if($=a0.dirname($),i.isRoot(_)){f=$+"/"+h.slice(J+1).join("/"),b--;continue x}else _=_.parent;continue}$=a0.join2($,h[J]);try{_=i.lookupNode(_,h[J])}catch(k0){if(k0?.errno===44&&Y&&c.noent_okay)return{path:$};throw k0}if(i.isMountpoint(_)&&(!Y||c.follow_mount)&&(_=_.mounted.root),i.isLink(_.mode)&&(!Y||c.follow)){if(!_.node_ops.readlink)throw new i.ErrnoError(52);var l0=_.node_ops.readlink(_);a0.isAbs(l0)||(l0=a0.dirname($)+"/"+l0),f=l0+"/"+h.slice(J+1).join("/");continue x}}}return{path:$,node:_}}throw new i.ErrnoError(32)},getPath(f){for(var c;;){if(i.isRoot(f)){var b=f.mount.mountpoint;return c?b[b.length-1]!=="/"?`${b}/${c}`:b+c:b}c=c?`${f.name}/${c}`:f.name,f=f.parent}},hashName(f,c){for(var b=0,h=0;h<c.length;h++)b=(b<<5)-b+c.charCodeAt(h)|0;return(f+b>>>0)%i.nameTable.length},hashAddNode(f){var c=i.hashName(f.parent.id,f.name);f.name_next=i.nameTable[c],i.nameTable[c]=f},hashRemoveNode(f){var c=i.hashName(f.parent.id,f.name);if(i.nameTable[c]===f)i.nameTable[c]=f.name_next;else for(var b=i.nameTable[c];b;){if(b.name_next===f){b.name_next=f.name_next;break}b=b.name_next}},lookupNode(f,c){var b=i.mayLookup(f);if(b)throw new i.ErrnoError(b);for(var h=i.hashName(f.id,c),_=i.nameTable[h];_;_=_.name_next){var $=_.name;if(_.parent.id===f.id&&$===c)return _}return i.lookup(f,c)},createNode(f,c,b,h){var _=new i.FSNode(f,c,b,h);return i.hashAddNode(_),_},destroyNode(f){i.hashRemoveNode(f)},isRoot(f){return f===f.parent},isMountpoint(f){return!!f.mounted},isFile(f){return(f&61440)===32768},isDir(f){return(f&61440)===16384},isLink(f){return(f&61440)===40960},isChrdev(f){return(f&61440)===8192},isBlkdev(f){return(f&61440)===24576},isFIFO(f){return(f&61440)===4096},isSocket(f){return(f&49152)===49152},flagsToPermissionString(f){var c=["r","w","rw"][f&3];return f&512&&(c+="w"),c},nodePermissions(f,c){return i.ignorePermissions?0:c.includes("r")&&!(f.mode&292)||c.includes("w")&&!(f.mode&146)||c.includes("x")&&!(f.mode&73)?2:0},mayLookup(f){if(!i.isDir(f.mode))return 54;var c=i.nodePermissions(f,"x");return c||(f.node_ops.lookup?0:2)},mayCreate(f,c){if(!i.isDir(f.mode))return 54;try{var b=i.lookupNode(f,c);return 20}catch{}return i.nodePermissions(f,"wx")},mayDelete(f,c,b){var h;try{h=i.lookupNode(f,c)}catch($){return $.errno}var _=i.nodePermissions(f,"wx");if(_)return _;if(b){if(!i.isDir(h.mode))return 54;if(i.isRoot(h)||i.getPath(h)===i.cwd())return 10}else if(i.isDir(h.mode))return 31;return 0},mayOpen(f,c){if(!f)return 44;if(i.isLink(f.mode))return 32;var b=i.flagsToPermissionString(c);return i.isDir(f.mode)&&(b!=="r"||c&576)?31:i.nodePermissions(f,b)},checkOpExists(f,c){if(!f)throw new i.ErrnoError(c);return f},MAX_OPEN_FDS:4096,nextfd(){for(var f=0;f<=i.MAX_OPEN_FDS;f++)if(!i.streams[f])return f;throw new i.ErrnoError(33)},getStreamChecked(f){var c=i.getStream(f);if(!c)throw new i.ErrnoError(8);return c},getStream:f=>i.streams[f],createStream(f,c=-1){return f=Object.assign(new i.FSStream,f),c==-1&&(c=i.nextfd()),f.fd=c,i.streams[c]=f,f},closeStream(f){i.streams[f]=null},dupStream(f,c=-1){var b=i.createStream(f,c);return b.stream_ops?.dup?.(b),b},doSetAttr(f,c,b){var h=f?.stream_ops.setattr,_=h?f:c;h??(h=c.node_ops.setattr),i.checkOpExists(h,63);try{h(_,b)}catch($){throw $ instanceof RangeError?new i.ErrnoError(22):$}},chrdev_stream_ops:{open(f){var c=i.getDevice(f.node.rdev);f.stream_ops=c.stream_ops,f.stream_ops.open?.(f)},llseek(){throw new i.ErrnoError(70)}},major:f=>f>>8,minor:f=>f&255,makedev:(f,c)=>f<<8|c,registerDevice(f,c){i.devices[f]={stream_ops:c}},getDevice:f=>i.devices[f],getMounts(f){for(var c=[],b=[f];b.length;){var h=b.pop();c.push(h),b.push(...h.mounts)}return c},syncfs(f,c){typeof f=="function"&&(c=f,f=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var b=i.getMounts(i.root.mount),h=0;function _(Y){return i.syncFSRequests--,c(Y)}function $(Y){if(Y)return $.errored?void 0:($.errored=!0,_(Y));++h>=b.length&&_(null)}for(var J of b)J.type.syncfs?J.type.syncfs(J,f,$):$(null)},mount(f,c,b){var h=b==="/",_=!b,$;if(h&&i.root)throw new i.ErrnoError(10);if(!h&&!_){var J=i.lookupPath(b,{follow_mount:!1});if(b=J.path,$=J.node,i.isMountpoint($))throw new i.ErrnoError(10);if(!i.isDir($.mode))throw new i.ErrnoError(54)}var Y={type:f,opts:c,mountpoint:b,mounts:[]},l0=f.mount(Y);return l0.mount=Y,Y.root=l0,h?i.root=l0:$&&($.mounted=Y,$.mount&&$.mount.mounts.push(Y)),l0},unmount(f){var c=i.lookupPath(f,{follow_mount:!1});if(!i.isMountpoint(c.node))throw new i.ErrnoError(28);var b=c.node,h=b.mounted,_=i.getMounts(h);for(var[$,J]of Object.entries(i.nameTable))for(;J;){var Y=J.name_next;_.includes(J.mount)&&i.destroyNode(J),J=Y}b.mounted=null;var l0=b.mount.mounts.indexOf(h);b.mount.mounts.splice(l0,1)},lookup(f,c){return f.node_ops.lookup(f,c)},mknod(f,c,b){var h=i.lookupPath(f,{parent:!0}),_=h.node,$=a0.basename(f);if(!$)throw new i.ErrnoError(28);if($==="."||$==="..")throw new i.ErrnoError(20);var J=i.mayCreate(_,$);if(J)throw new i.ErrnoError(J);if(!_.node_ops.mknod)throw new i.ErrnoError(63);return _.node_ops.mknod(_,$,c,b)},statfs(f){return i.statfsNode(i.lookupPath(f,{follow:!0}).node)},statfsStream(f){return i.statfsNode(f.node)},statfsNode(f){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return f.node_ops.statfs&&Object.assign(c,f.node_ops.statfs(f.mount.opts.root)),c},create(f,c=438){return c&=4095,c|=32768,i.mknod(f,c,0)},mkdir(f,c=511){return c&=1023,c|=16384,i.mknod(f,c,0)},mkdirTree(f,c){var b=f.split("/"),h="";for(var _ of b)if(_){(h||a0.isAbs(f))&&(h+="/"),h+=_;try{i.mkdir(h,c)}catch($){if($.errno!=20)throw $}}},mkdev(f,c,b){return typeof b>"u"&&(b=c,c=438),c|=8192,i.mknod(f,c,b)},symlink(f,c){if(!ix.resolve(f))throw new i.ErrnoError(44);var b=i.lookupPath(c,{parent:!0}),h=b.node;if(!h)throw new i.ErrnoError(44);var _=a0.basename(c),$=i.mayCreate(h,_);if($)throw new i.ErrnoError($);if(!h.node_ops.symlink)throw new i.ErrnoError(63);return h.node_ops.symlink(h,_,f)},rename(f,c){var b=a0.dirname(f),h=a0.dirname(c),_=a0.basename(f),$=a0.basename(c),J,Y,l0;if(J=i.lookupPath(f,{parent:!0}),Y=J.node,J=i.lookupPath(c,{parent:!0}),l0=J.node,!Y||!l0)throw new i.ErrnoError(44);if(Y.mount!==l0.mount)throw new i.ErrnoError(75);var k0=i.lookupNode(Y,_),Q0=ix.relative(f,h);if(Q0.charAt(0)!==".")throw new i.ErrnoError(28);if(Q0=ix.relative(c,b),Q0.charAt(0)!==".")throw new i.ErrnoError(55);var H0;try{H0=i.lookupNode(l0,$)}catch{}if(k0!==H0){var R0=i.isDir(k0.mode),q0=i.mayDelete(Y,_,R0);if(q0)throw new i.ErrnoError(q0);if(q0=H0?i.mayDelete(l0,$,R0):i.mayCreate(l0,$),q0)throw new i.ErrnoError(q0);if(!Y.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(k0)||H0&&i.isMountpoint(H0))throw new i.ErrnoError(10);if(l0!==Y&&(q0=i.nodePermissions(Y,"w"),q0))throw new i.ErrnoError(q0);i.hashRemoveNode(k0);try{Y.node_ops.rename(k0,l0,$),k0.parent=l0}catch(vx){throw vx}finally{i.hashAddNode(k0)}}},rmdir(f){var c=i.lookupPath(f,{parent:!0}),b=c.node,h=a0.basename(f),_=i.lookupNode(b,h),$=i.mayDelete(b,h,!0);if($)throw new i.ErrnoError($);if(!b.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(_))throw new i.ErrnoError(10);b.node_ops.rmdir(b,h),i.destroyNode(_)},readdir(f){var c=i.lookupPath(f,{follow:!0}),b=c.node,h=i.checkOpExists(b.node_ops.readdir,54);return h(b)},unlink(f){var c=i.lookupPath(f,{parent:!0}),b=c.node;if(!b)throw new i.ErrnoError(44);var h=a0.basename(f),_=i.lookupNode(b,h),$=i.mayDelete(b,h,!1);if($)throw new i.ErrnoError($);if(!b.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(_))throw new i.ErrnoError(10);b.node_ops.unlink(b,h),i.destroyNode(_)},readlink(f){var c=i.lookupPath(f),b=c.node;if(!b)throw new i.ErrnoError(44);if(!b.node_ops.readlink)throw new i.ErrnoError(28);return b.node_ops.readlink(b)},stat(f,c){var b=i.lookupPath(f,{follow:!c}),h=b.node,_=i.checkOpExists(h.node_ops.getattr,63);return _(h)},fstat(f){var c=i.getStreamChecked(f),b=c.node,h=c.stream_ops.getattr,_=h?c:b;return h??(h=b.node_ops.getattr),i.checkOpExists(h,63),h(_)},lstat(f){return i.stat(f,!0)},doChmod(f,c,b,h){i.doSetAttr(f,c,{mode:b&4095|c.mode&-4096,ctime:Date.now(),dontFollow:h})},chmod(f,c,b){var h;if(typeof f=="string"){var _=i.lookupPath(f,{follow:!b});h=_.node}else h=f;i.doChmod(null,h,c,b)},lchmod(f,c){i.chmod(f,c,!0)},fchmod(f,c){var b=i.getStreamChecked(f);i.doChmod(b,b.node,c,!1)},doChown(f,c,b){i.doSetAttr(f,c,{timestamp:Date.now(),dontFollow:b})},chown(f,c,b,h){var _;if(typeof f=="string"){var $=i.lookupPath(f,{follow:!h});_=$.node}else _=f;i.doChown(null,_,h)},lchown(f,c,b){i.chown(f,c,b,!0)},fchown(f,c,b){var h=i.getStreamChecked(f);i.doChown(h,h.node,!1)},doTruncate(f,c,b){if(i.isDir(c.mode))throw new i.ErrnoError(31);if(!i.isFile(c.mode))throw new i.ErrnoError(28);var h=i.nodePermissions(c,"w");if(h)throw new i.ErrnoError(h);i.doSetAttr(f,c,{size:b,timestamp:Date.now()})},truncate(f,c){if(c<0)throw new i.ErrnoError(28);var b;if(typeof f=="string"){var h=i.lookupPath(f,{follow:!0});b=h.node}else b=f;i.doTruncate(null,b,c)},ftruncate(f,c){var b=i.getStreamChecked(f);if(c<0||(b.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(b,b.node,c)},utime(f,c,b){var h=i.lookupPath(f,{follow:!0}),_=h.node,$=i.checkOpExists(_.node_ops.setattr,63);$(_,{atime:c,mtime:b})},open(f,c,b=438){if(f==="")throw new i.ErrnoError(44);c=mA(c),c&64?b=b&4095|32768:b=0;var h,_;if(typeof f=="object")h=f;else{_=f.endsWith("/");var $=i.lookupPath(f,{follow:!(c&131072),noent_okay:!0});h=$.node,f=$.path}var J=!1;if(c&64)if(h){if(c&128)throw new i.ErrnoError(20)}else{if(_)throw new i.ErrnoError(31);h=i.mknod(f,b|511,0),J=!0}if(!h)throw new i.ErrnoError(44);if(i.isChrdev(h.mode)&&(c&=-513),c&65536&&!i.isDir(h.mode))throw new i.ErrnoError(54);if(!J){var Y=i.mayOpen(h,c);if(Y)throw new i.ErrnoError(Y)}c&512&&!J&&i.truncate(h,0),c&=-131713;var l0=i.createStream({node:h,path:i.getPath(h),flags:c,seekable:!0,position:0,stream_ops:h.stream_ops,ungotten:[],error:!1});return l0.stream_ops.open&&l0.stream_ops.open(l0),J&&i.chmod(h,b&511),l0},close(f){if(i.isClosed(f))throw new i.ErrnoError(8);f.getdents&&(f.getdents=null);try{f.stream_ops.close&&f.stream_ops.close(f)}catch(c){throw c}finally{i.closeStream(f.fd)}f.fd=null},isClosed(f){return f.fd===null},llseek(f,c,b){if(i.isClosed(f))throw new i.ErrnoError(8);if(!f.seekable||!f.stream_ops.llseek)throw new i.ErrnoError(70);if(b!=0&&b!=1&&b!=2)throw new i.ErrnoError(28);return f.position=f.stream_ops.llseek(f,c,b),f.ungotten=[],f.position},read(f,c,b,h,_){if(h<0||_<0)throw new i.ErrnoError(28);if(i.isClosed(f))throw new i.ErrnoError(8);if((f.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(f.node.mode))throw new i.ErrnoError(31);if(!f.stream_ops.read)throw new i.ErrnoError(28);var $=typeof _<"u";if(!$)_=f.position;else if(!f.seekable)throw new i.ErrnoError(70);var J=f.stream_ops.read(f,c,b,h,_);return $||(f.position+=J),J},write(f,c,b,h,_,$){if(h<0||_<0)throw new i.ErrnoError(28);if(i.isClosed(f))throw new i.ErrnoError(8);if((f.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(f.node.mode))throw new i.ErrnoError(31);if(!f.stream_ops.write)throw new i.ErrnoError(28);f.seekable&&f.flags&1024&&i.llseek(f,0,2);var J=typeof _<"u";if(!J)_=f.position;else if(!f.seekable)throw new i.ErrnoError(70);var Y=f.stream_ops.write(f,c,b,h,_,$);return J||(f.position+=Y),Y},mmap(f,c,b,h,_){if((h&2)!==0&&(_&2)===0&&(f.flags&2097155)!==2)throw new i.ErrnoError(2);if((f.flags&2097155)===1)throw new i.ErrnoError(2);if(!f.stream_ops.mmap)throw new i.ErrnoError(43);if(!c)throw new i.ErrnoError(28);return f.stream_ops.mmap(f,c,b,h,_)},msync(f,c,b,h,_){return f.stream_ops.msync?f.stream_ops.msync(f,c,b,h,_):0},ioctl(f,c,b){if(!f.stream_ops.ioctl)throw new i.ErrnoError(59);return f.stream_ops.ioctl(f,c,b)},readFile(f,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&p0(`Invalid encoding type "${c.encoding}"`);var b=i.open(f,c.flags),h=i.stat(f),_=h.size,$=new Uint8Array(_);return i.read(b,$,0,_,0),c.encoding==="utf8"&&($=wx($)),i.close(b),$},writeFile(f,c,b={}){b.flags=b.flags||577;var h=i.open(f,b.flags,b.mode);c=Yx(c),i.write(h,c,0,c.byteLength,void 0,b.canOwn),i.close(h)},cwd:()=>i.currentPath,chdir(f){var c=i.lookupPath(f,{follow:!0});if(c.node===null)throw new i.ErrnoError(44);if(!i.isDir(c.node.mode))throw new i.ErrnoError(54);var b=i.nodePermissions(c.node,"x");if(b)throw new i.ErrnoError(b);i.currentPath=c.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(h,_,$,J,Y)=>J,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var f=new Uint8Array(1024),c=0,b=()=>(c===0&&(xr(f),c=f.byteLength),f[--c]);i.createDevice("/dev","random",b),i.createDevice("/dev","urandom",b),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var f=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var c=i.createNode(f,"fd",16895,73);return c.stream_ops={llseek:K.stream_ops.llseek},c.node_ops={lookup(b,h){var _=+h,$=i.getStreamChecked(_),J={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:_+1};return J.parent=J,J},readdir(){return Array.from(i.streams.entries()).filter(([b,h])=>h).map(([b,h])=>b.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(f,c,b){f?i.createDevice("/dev","stdin",f):i.symlink("/dev/tty","/dev/stdin"),c?i.createDevice("/dev","stdout",null,c):i.symlink("/dev/tty","/dev/stdout"),b?i.createDevice("/dev","stderr",null,b):i.symlink("/dev/tty1","/dev/stderr");var h=i.open("/dev/stdin",0),_=i.open("/dev/stdout",1),$=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(K,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:K,PROXYFS:j0}},init(f,c,b){i.initialized=!0,f??(f=s.stdin),c??(c=s.stdout),b??(b=s.stderr),i.createStandardStreams(f,c,b)},quit(){i.initialized=!1,OA(0);for(var f of i.streams)f&&i.close(f)},findObject(f,c){var b=i.analyzePath(f,c);return b.exists?b.object:null},analyzePath(f,c){try{var b=i.lookupPath(f,{follow:!c});f=b.path}catch{}var h={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var b=i.lookupPath(f,{parent:!0});h.parentExists=!0,h.parentPath=b.path,h.parentObject=b.node,h.name=a0.basename(f),b=i.lookupPath(f,{follow:!c}),h.exists=!0,h.path=b.path,h.object=b.node,h.name=b.node.name,h.isRoot=b.path==="/"}catch(_){h.error=_.errno}return h},createPath(f,c,b,h){f=typeof f=="string"?f:i.getPath(f);for(var _=c.split("/").reverse();_.length;){var $=_.pop();if($){var J=a0.join2(f,$);try{i.mkdir(J)}catch(Y){if(Y.errno!=20)throw Y}f=J}}return J},createFile(f,c,b,h,_){var $=a0.join2(typeof f=="string"?f:i.getPath(f),c),J=Qx(h,_);return i.create($,J)},createDataFile(f,c,b,h,_,$){var J=c;f&&(f=typeof f=="string"?f:i.getPath(f),J=c?a0.join2(f,c):f);var Y=Qx(h,_),l0=i.create(J,Y);if(b){b=Yx(b),i.chmod(l0,Y|146);var k0=i.open(l0,577);i.write(k0,b,0,b.length,0,$),i.close(k0),i.chmod(l0,Y)}},createDevice(f,c,b,h){var _,$=a0.join2(typeof f=="string"?f:i.getPath(f),c),J=Qx(!!b,!!h);(_=i.createDevice).major??(_.major=64);var Y=i.makedev(i.createDevice.major++,0);return i.registerDevice(Y,{open(l0){l0.seekable=!1},close(l0){h?.buffer?.length&&h(10)},read(l0,k0,Q0,H0,R0){for(var q0=0,vx=0;vx<H0;vx++){var gx;try{gx=b()}catch{throw new i.ErrnoError(29)}if(gx===void 0&&q0===0)throw new i.ErrnoError(6);if(gx==null)break;q0++,k0[Q0+vx]=gx}return q0&&(l0.node.atime=Date.now()),q0},write(l0,k0,Q0,H0,R0){for(var q0=0;q0<H0;q0++)try{h(k0[Q0+q0])}catch{throw new i.ErrnoError(29)}return H0&&(l0.node.mtime=l0.node.ctime=Date.now()),q0}}),i.mkdev($,J,Y)},forceLoadFile(f){if(f.isDevice||f.isFolder||f.link||f.contents)return!0;if(globalThis.XMLHttpRequest)p0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{f.contents=P(f.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(f,c,b,h,_){class ${constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(R0){if(!(R0>this.length-1||R0<0)){var q0=R0%this.chunkSize,vx=R0/this.chunkSize|0;return this.getter(vx)[q0]}}setDataGetter(R0){this.getter=R0}cacheLength(){var R0=new XMLHttpRequest;R0.open("HEAD",b,!1),R0.send(null),R0.status>=200&&R0.status<300||R0.status===304||p0("Couldn't load "+b+". Status: "+R0.status);var q0=Number(R0.getResponseHeader("Content-length")),vx,gx=(vx=R0.getResponseHeader("Accept-Ranges"))&&vx==="bytes",Lx=(vx=R0.getResponseHeader("Content-Encoding"))&&vx==="gzip",Kx=1024*1024;gx||(Kx=q0);var zx=(Zx,aA)=>{Zx>aA&&p0("invalid range ("+Zx+", "+aA+") or no bytes requested!"),aA>q0-1&&p0("only "+q0+" bytes available! programmer error!");var Cx=new XMLHttpRequest;return Cx.open("GET",b,!1),q0!==Kx&&Cx.setRequestHeader("Range","bytes="+Zx+"-"+aA),Cx.responseType="arraybuffer",Cx.overrideMimeType&&Cx.overrideMimeType("text/plain; charset=x-user-defined"),Cx.send(null),Cx.status>=200&&Cx.status<300||Cx.status===304||p0("Couldn't load "+b+". Status: "+Cx.status),Cx.response!==void 0?new Uint8Array(Cx.response||[]):EA(Cx.responseText||"",!0)},JA=this;JA.setDataGetter(Zx=>{var aA=Zx*Kx,Cx=(Zx+1)*Kx-1;return Cx=Math.min(Cx,q0-1),typeof JA.chunks[Zx]>"u"&&(JA.chunks[Zx]=zx(aA,Cx)),typeof JA.chunks[Zx]>"u"&&p0("doXHR failed!"),JA.chunks[Zx]}),(Lx||!q0)&&(Kx=q0=1,q0=this.getter(0).length,Kx=q0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=q0,this._chunkSize=Kx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){B||p0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var J=new $,Y={isDevice:!1,contents:J}}else var Y={isDevice:!1,url:b};var l0=i.createFile(f,c,Y,h,_);Y.contents?l0.contents=Y.contents:Y.url&&(l0.contents=null,l0.url=Y.url),Object.defineProperties(l0,{usedBytes:{get:function(){return this.contents.length}}});var k0={};for(let[H0,R0]of Object.entries(l0.stream_ops))k0[H0]=(...q0)=>(i.forceLoadFile(l0),R0(...q0));function Q0(H0,R0,q0,vx,gx){var Lx=H0.node.contents;if(gx>=Lx.length)return 0;var Kx=Math.min(Lx.length-gx,vx);if(Lx.slice)for(var zx=0;zx<Kx;zx++)R0[q0+zx]=Lx[gx+zx];else for(var zx=0;zx<Kx;zx++)R0[q0+zx]=Lx.get(gx+zx);return Kx}return k0.read=(H0,R0,q0,vx,gx)=>(i.forceLoadFile(l0),Q0(H0,R0,q0,vx,gx)),k0.mmap=(H0,R0,q0,vx,gx)=>{i.forceLoadFile(l0);var Lx=BA(R0);if(!Lx)throw new i.ErrnoError(48);return Q0(H0,P0,Lx,R0,q0),{ptr:Lx,allocated:!0}},l0.stream_ops=k0,l0}},h0={currentUmask:18,calculateAt(f,c,b){if(a0.isAbs(c))return c;var h;if(f===-100)h=i.cwd();else{var _=h0.getStreamFromFD(f);h=_.path}if(c.length==0){if(!b)throw new i.ErrnoError(44);return h}return h+"/"+c},writeStat(f,c){C0[f>>2]=c.dev,C0[f+4>>2]=c.mode,C0[f+8>>2]=c.nlink,C0[f+12>>2]=c.uid,C0[f+16>>2]=c.gid,C0[f+20>>2]=c.rdev,Y0[f+24>>3]=BigInt(c.size),J0[f+32>>2]=4096,J0[f+36>>2]=c.blocks;var b=c.atime.getTime(),h=c.mtime.getTime(),_=c.ctime.getTime();return Y0[f+40>>3]=BigInt(Math.floor(b/1e3)),C0[f+48>>2]=b%1e3*1e3*1e3,Y0[f+56>>3]=BigInt(Math.floor(h/1e3)),C0[f+64>>2]=h%1e3*1e3*1e3,Y0[f+72>>3]=BigInt(Math.floor(_/1e3)),C0[f+80>>2]=_%1e3*1e3*1e3,Y0[f+88>>3]=BigInt(c.ino),0},writeStatFs(f,c){C0[f+4>>2]=c.bsize,C0[f+60>>2]=c.bsize,Y0[f+8>>3]=BigInt(c.blocks),Y0[f+16>>3]=BigInt(c.bfree),Y0[f+24>>3]=BigInt(c.bavail),Y0[f+32>>3]=BigInt(c.files),Y0[f+40>>3]=BigInt(c.ffree),C0[f+48>>2]=c.fsid,C0[f+64>>2]=c.flags,C0[f+56>>2]=c.namelen},doMsync(f,c,b,h,_){if(!i.isFile(c.node.mode))throw new i.ErrnoError(43);if(h&2)return 0;var $=tA.slice(f,f+b);i.msync(c,$,_,b,h)},getStreamFromFD(f){var c=i.getStreamChecked(f);return c},varargs:void 0,getStr(f){var c=Fx(f);return c}};function br(f,c,b){h0.varargs=b;try{var h=h0.getStreamFromFD(f);switch(c){case 0:{var _=Hx();if(_<0)return-28;for(;i.streams[_];)_++;var $;return $=i.dupStream(h,_),$.fd}case 1:case 2:return 0;case 3:return h.flags;case 4:{var _=Hx(),J=289792;return h.flags=h.flags&~J|_&J,0}case 12:{var _=Jx(),Y=0;return V0[_+Y>>1]=2,0}case 13:case 14:return 0}return-28}catch(l0){if(typeof i>"u"||l0.name!=="ErrnoError")throw l0;return-l0.errno}}function hA(f,c,b){h0.varargs=b;try{var h=h0.getStreamFromFD(f);switch(c){case 21509:return h.tty?0:-59;case 21505:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcgets){var _=h.tty.ops.ioctl_tcgets(h),$=Jx();J0[$>>2]=_.c_iflag||0,J0[$+4>>2]=_.c_oflag||0,J0[$+8>>2]=_.c_cflag||0,J0[$+12>>2]=_.c_lflag||0;for(var J=0;J<32;J++)P0[$+J+17]=_.c_cc[J]||0;return 0}return 0}case 21510:case 21511:case 21512:return h.tty?0:-59;case 21506:case 21507:case 21508:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcsets){for(var $=Jx(),Y=J0[$>>2],l0=J0[$+4>>2],k0=J0[$+8>>2],Q0=J0[$+12>>2],H0=[],J=0;J<32;J++)H0.push(P0[$+J+17]);return h.tty.ops.ioctl_tcsets(h.tty,c,{c_iflag:Y,c_oflag:l0,c_cflag:k0,c_lflag:Q0,c_cc:H0})}return 0}case 21519:{if(!h.tty)return-59;var $=Jx();return J0[$>>2]=0,0}case 21520:return h.tty?-28:-59;case 21537:case 21531:{var $=Jx();return i.ioctl(h,c,$)}case 21523:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tiocgwinsz){var R0=h.tty.ops.ioctl_tiocgwinsz(h.tty),$=Jx();V0[$>>1]=R0[0],V0[$+2>>1]=R0[1]}return 0}case 21524:return h.tty?0:-59;case 21515:return h.tty?0:-59;default:return-28}}catch(q0){if(typeof i>"u"||q0.name!=="ErrnoError")throw q0;return-q0.errno}}function dA(f,c,b,h){h0.varargs=h;try{c=h0.getStr(c),c=h0.calculateAt(f,c);var _=h?Hx():0;return b&64&&(_&=~h0.currentUmask),i.open(c,b,_).fd}catch($){if(typeof i>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var fe=()=>2147483648,tr=(f,c)=>Math.ceil(f/c)*c,Lr=f=>{var c=gA.buffer.byteLength,b=(f-c+65535)/65536|0;try{return gA.grow(b),x0(),1}catch{}},Rr=f=>{var c=tA.length;f>>>=0;var b=fe();if(f>b)return!1;for(var h=1;h<=4;h*=2){var _=c*(1+.2/h);_=Math.min(_,f+100663296);var $=Math.min(b,tr(Math.max(f,_),65536)),J=Lr($);if(J)return!0}return!1};function le(f){try{var c=h0.getStreamFromFD(f);return i.close(c),0}catch(b){if(typeof i>"u"||b.name!=="ErrnoError")throw b;return b.errno}}var Ee=(f,c,b,h)=>{for(var _=0,$=0;$<b;$++){var J=C0[c>>2],Y=C0[c+4>>2];c+=8;var l0=i.read(f,P0,J,Y,h);if(l0<0)return-1;if(_+=l0,l0<Y)break;typeof h<"u"&&(h+=l0)}return _};function Be(f,c,b,h){try{var _=h0.getStreamFromFD(f),$=Ee(_,c,b);return C0[h>>2]=$,0}catch(J){if(typeof i>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var nr=9007199254740992,Or=-9007199254740992,LA=f=>f<Or||f>nr?NaN:Number(f);function sr(f,c,b,h){c=LA(c);try{if(isNaN(c))return 22;var _=h0.getStreamFromFD(f);return i.llseek(_,c,b),Y0[h>>3]=BigInt(_.position),_.getdents&&c===0&&b===0&&(_.getdents=null),0}catch($){if(typeof i>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ce=(f,c,b,h)=>{for(var _=0,$=0;$<b;$++){var J=C0[c>>2],Y=C0[c+4>>2];c+=8;var l0=i.write(f,P0,J,Y,h);if(l0<0)return-1;if(_+=l0,l0<Y)break;typeof h<"u"&&(h+=l0)}return _};function Gr(f,c,b,h){try{var _=h0.getStreamFromFD(f),$=ce(_,c,b);return C0[h>>2]=$,0}catch(J){if(typeof i>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var Ur=0,RA=()=>ZA||Ur>0,ir=f=>{L=f,RA()||(s.onExit?.(f),v0=!0),g(f,new sx(f))},pr=(f,c)=>{L=f,RA()||E0(),ir(f)},Hr=f=>{if(f instanceof sx||f=="unwind")return L;g(1,f)},Jr=(f,c,b)=>Ar(f,tA,c,b),Kr=f=>GA(f),Ce=f=>{var c=lA(f)+1,b=Kr(c);return Jr(f,b,c),b},de=(...f)=>i.createPath(...f),ar=(...f)=>i.unlink(...f),De=(...f)=>i.createLazyFile(...f),ue=(...f)=>i.createDevice(...f);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(ZA=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(p=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.callMain=mx,s.addRunDependency=Sx,s.removeRunDependency=er,s.FS_preloadFile=iA,s.FS_unlink=ar,s.FS_createPath=de,s.FS_createDevice=ue,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=De,s.PROXYFS=j0;var zr,Vr,OA,Wr,GA,jr,Mx,be,gA;function UA(f){zr=s._main=f.__main_argc_argv,Vr=f.__funcs_on_exit,OA=f.fflush,Wr=f._emscripten_stack_restore,GA=f._emscripten_stack_alloc,jr=f.emscripten_stack_get_current,Mx=gA=f.memory,be=f.__indirect_function_table}var mr={__assert_fail:fA,__syscall_fcntl64:br,__syscall_ioctl:hA,__syscall_openat:dA,emscripten_resize_heap:Rr,fd_close:le,fd_read:Be,fd_seek:sr,fd_write:Gr};function mx(f=[]){var c=zr;f.unshift(j);var b=f.length,h=Kr((b+1)*4),_=h;for(var $ of f)C0[_>>2]=Ce($),_+=4;C0[_>>2]=0;try{var J=c(b,h);return pr(J,!0),J}catch(Y){return Hr(Y)}}function or(f=p){if(Ax>0){_0=or;return}if(f0(),Ax>0){_0=or;return}function c(){if(s.calledRun=!0,!v0){U(),H?.(s),s.onRuntimeInitialized?.();var b=s.noInitialRun||!0;b||mx(f),b0()}}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),c()},1)):c()}var HA;return HA=await O0(),or(),n0?a=s:a=new Promise((f,c)=>{H=f,V=c}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),wB=Ss({"wasm/bin/pawnrun.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a,s=t,l=!!globalThis.window,B=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",p=[],j="./this.program",g=(F,n)=>{throw n};typeof __filename<"u"?e=__filename:B&&(e=self.location.href);var q="",S,P;if(D){var T=require("fs");q=__dirname+"/",P=F=>{F=L(F)?new URL(F):F;var n=T.readFileSync(F);return n},S=async(F,n=!0)=>{F=L(F)?new URL(F):F;var o=T.readFileSync(F,n?void 0:"utf8");return o},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),g=(F,n)=>{throw process.exitCode=F,n}}else if(l||B){try{q=new URL(".",e).href}catch{}B&&(P=F=>{var n=new XMLHttpRequest;return n.open("GET",F,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),S=async F=>{if(L(F))return new Promise((o,v)=>{var E=new XMLHttpRequest;E.open("GET",F,!0),E.responseType="arraybuffer",E.onload=()=>{if(E.status==200||E.status==0&&E.response){o(E.response);return}v(E.status)},E.onerror=v,E.send(null)});var n=await fetch(F,{credentials:"same-origin"});if(n.ok)return n.arrayBuffer();throw new Error(n.status+" : "+n.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,v0=!1,L=F=>F.startsWith("file://");class k{}class O extends k{}function W(F){for(var n=0,o=F.length,v=new Uint8Array(o),E;n<o;++n)E=F.charCodeAt(n),v[n]=~E>>8&E;return v}var X,H,V=!1;function n0(){var F=hr.buffer;sx=new Int8Array(F),Ux=new Int16Array(F),s.HEAPU8=IA=new Uint8Array(F),Y0=new Uint16Array(F),s.HEAP32=U0=new Int32Array(F),s.HEAPU32=P0=new Uint32Array(F),V0=new Float32Array(F),J0=new Float64Array(F),O0=new BigInt64Array(F),ie=new BigUint64Array(F)}function e0(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)pA(s.preRun.shift());Nr(tA)}function x0(){V=!0,!s.noFSInit&&!i.initialized&&i.init(),z0.init(),KA.__wasm_call_ctors(),i.ignorePermissions=!1}function f0(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)ae(s.postRun.shift());Nr(C0)}function U(F){s.onAbort?.(F),F=`Aborted(${F})`,N(F),v0=!0,F+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(F);throw H?.(n),n}var F0;function E0(){return W(`\0asm\0\0\0\xD7#\`\x7F\x7F\x7F\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\0\x7F\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\x7F\0\`}}\`\x7F~~~~\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\x7F\0\`|}\`\x7F}\`|\x7F|\`\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\0|\`|\0\`}\x7F\x7F\`}}}\`\x7F}}\`}\x7F\`}\x7F}\`\x7F~~~\0\`\x7F~\`|\x7F}\`~\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xBE\fenvpr_js_has_dispatch\0envpr_js_dispatch\0env\r__assert_fail\0env\fpr_debug_out\0\0env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xD9\xD7\r\x07\0\0\0\v\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x07\x07\v\r\0\b\b\b\b\b\x07
|
|
1526
|
+
\0A\x80\v\vp\0\0D\0\0\0`)}function cx(f){return f}async function eA(f){return f}async function NA(f,c){try{var p=await eA(f),h=await WebAssembly.instantiate(p,c);return h}catch(_){N(`failed to asynchronously prepare wasm: ${_}`),b0(_)}}async function Ux(f,c,p){return NA(c,p)}function U0(){var f={env:mr,wasi_snapshot_preview1:mr};return f}async function O0(){function f($,K){return HA=$.exports,UA(HA),x0(),HA}function c($){return f($.instance)}var p=U0();if(s.instantiateWasm)return new Promise(($,K)=>{s.instantiateWasm(p,(Y,l0)=>{$(f(Y,l0))})});N0??(N0=L0());var h=await Ux(z,N0,p),_=c(h);return _}class sx{constructor(c){xx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${c})`,this.status=c}}var V0,K0,Y0,P0,ie,IA,Nr,C0,ae,tA,bA=f=>{for(;f.length>0;)f.shift()(s)},jA=[],Ir=f=>jA.push(f),nA=[],Mr=f=>nA.push(f),ZA=!1,ox=globalThis.TextDecoder&&new TextDecoder,$0=(f,c,p,h)=>{var _=c+p;if(h)return _;for(;f[c]&&!(c>=_);)++c;return c},wx=(f,c=0,p,h)=>{var _=$0(f,c,p,h);if(_-c>16&&f.buffer&&ox)return ox.decode(f.subarray(c,_));for(var $="";c<_;){var K=f[c++];if(!(K&128)){$+=String.fromCharCode(K);continue}var Y=f[c++]&63;if((K&224)==192){$+=String.fromCharCode((K&31)<<6|Y);continue}var l0=f[c++]&63;if((K&240)==224?K=(K&15)<<12|Y<<6|l0:K=(K&7)<<18|Y<<12|l0<<6|f[c++]&63,K<65536)$+=String.fromCharCode(K);else{var k0=K-65536;$+=String.fromCharCode(55296|k0>>10,56320|k0&1023)}}return $},Fx=(f,c,p)=>f?wx(tA,f,c,p):"",fA=(f,c,p,h)=>b0(`Assertion failed: ${Fx(f)}, at: `+[c?Fx(c):"unknown filename",p,h?Fx(h):"unknown function"]),Hx=()=>{var f=K0[+h0.varargs>>2];return h0.varargs+=4,f},Kx=Hx,a0={isAbs:f=>f.charAt(0)==="/",splitPath:f=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return c.exec(f).slice(1)},normalizeArray:(f,c)=>{for(var p=0,h=f.length-1;h>=0;h--){var _=f[h];_==="."?f.splice(h,1):_===".."?(f.splice(h,1),p++):p&&(f.splice(h,1),p--)}if(c)for(;p;p--)f.unshift("..");return f},normalize:f=>{var c=a0.isAbs(f),p=f.slice(-1)==="/";return f=a0.normalizeArray(f.split("/").filter(h=>!!h),!c).join("/"),!f&&!c&&(f="."),f&&p&&(f+="/"),(c?"/":"")+f},dirname:f=>{var c=a0.splitPath(f),p=c[0],h=c[1];return!p&&!h?".":(h&&(h=h.slice(0,-1)),p+h)},basename:f=>f&&f.match(/([^\/]+|\/)\/*$/)[1],join:(...f)=>a0.normalize(f.join("/")),join2:(f,c)=>a0.normalize(f+"/"+c)},oe=()=>{if(D){var f=require("crypto");return c=>f.randomFillSync(c)}return c=>(crypto.getRandomValues(c),0)},xr=f=>(xr=oe())(f),ix={resolve:(...f)=>{for(var c="",p=!1,h=f.length-1;h>=-1&&!p;h--){var _=h>=0?f[h]:i.cwd();if(typeof _!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!_)return"";c=_+"/"+c,p=a0.isAbs(_)}return c=a0.normalizeArray(c.split("/").filter($=>!!$),!p).join("/"),(p?"/":"")+c||"."},relative:(f,c)=>{f=ix.resolve(f).slice(1),c=ix.resolve(c).slice(1);function p(k0){for(var Q0=0;Q0<k0.length&&k0[Q0]==="";Q0++);for(var H0=k0.length-1;H0>=0&&k0[H0]==="";H0--);return Q0>H0?[]:k0.slice(Q0,H0-Q0+1)}for(var h=p(f.split("/")),_=p(c.split("/")),$=Math.min(h.length,_.length),K=$,Y=0;Y<$;Y++)if(h[Y]!==_[Y]){K=Y;break}for(var l0=[],Y=K;Y<h.length;Y++)l0.push("..");return l0=l0.concat(_.slice(K)),l0.join("/")}},Ix=[],lA=f=>{for(var c=0,p=0;p<f.length;++p){var h=f.charCodeAt(p);h<=127?c++:h<=2047?c+=2:h>=55296&&h<=57343?(c+=4,++p):c+=3}return c},Ar=(f,c,p,h)=>{if(!(h>0))return 0;for(var _=p,$=p+h-1,K=0;K<f.length;++K){var Y=f.codePointAt(K);if(Y<=127){if(p>=$)break;c[p++]=Y}else if(Y<=2047){if(p+1>=$)break;c[p++]=192|Y>>6,c[p++]=128|Y&63}else if(Y<=65535){if(p+2>=$)break;c[p++]=224|Y>>12,c[p++]=128|Y>>6&63,c[p++]=128|Y&63}else{if(p+3>=$)break;c[p++]=240|Y>>18,c[p++]=128|Y>>12&63,c[p++]=128|Y>>6&63,c[p++]=128|Y&63,K++}}return c[p]=0,p-_},EA=(f,c,p)=>{var h=p>0?p:lA(f)+1,_=new Array(h),$=Ar(f,_,0,_.length);return c&&(_.length=$),_},Fe=()=>{if(!Ix.length){var f=null;if(D){var c=256,p=Buffer.alloc(c),h=0,_=process.stdin.fd;try{h=T.readSync(_,p,0,c)}catch($){if($.toString().includes("EOF"))h=0;else throw $}h>0&&(f=p.slice(0,h).toString("utf-8"))}else globalThis.window?.prompt&&(f=window.prompt("Input: "),f!==null&&(f+=`
|
|
1527
|
+
`));if(!f)return null;Ix=EA(f,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(f,c){z0.ttys[f]={input:[],output:[],ops:c},i.registerDevice(f,z0.stream_ops)},stream_ops:{open(f){var c=z0.ttys[f.node.rdev];if(!c)throw new i.ErrnoError(43);f.tty=c,f.seekable=!1},close(f){f.tty.ops.fsync(f.tty)},fsync(f){f.tty.ops.fsync(f.tty)},read(f,c,p,h,_){if(!f.tty||!f.tty.ops.get_char)throw new i.ErrnoError(60);for(var $=0,K=0;K<h;K++){var Y;try{Y=f.tty.ops.get_char(f.tty)}catch{throw new i.ErrnoError(29)}if(Y===void 0&&$===0)throw new i.ErrnoError(6);if(Y==null)break;$++,c[p+K]=Y}return $&&(f.node.atime=Date.now()),$},write(f,c,p,h,_){if(!f.tty||!f.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var $=0;$<h;$++)f.tty.ops.put_char(f.tty,c[p+$])}catch{throw new i.ErrnoError(29)}return h&&(f.node.mtime=f.node.ctime=Date.now()),$}},default_tty_ops:{get_char(f){return Fe()},put_char(f,c){c===null||c===10?(M(wx(f.output)),f.output=[]):c!=0&&f.output.push(c)},fsync(f){f.output?.length>0&&(M(wx(f.output)),f.output=[])},ioctl_tcgets(f){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(f,c,p){return 0},ioctl_tiocgwinsz(f){return[24,80]}},default_tty1_ops:{put_char(f,c){c===null||c===10?(N(wx(f.output)),f.output=[]):c!=0&&f.output.push(c)},fsync(f){f.output?.length>0&&(N(wx(f.output)),f.output=[])}}},BA=f=>{b0()},J={ops_table:null,mount(f){return J.createNode(null,"/",16895,0)},createNode(f,c,p,h){if(i.isBlkdev(p)||i.isFIFO(p))throw new i.ErrnoError(63);J.ops_table||(J.ops_table={dir:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,lookup:J.node_ops.lookup,mknod:J.node_ops.mknod,rename:J.node_ops.rename,unlink:J.node_ops.unlink,rmdir:J.node_ops.rmdir,readdir:J.node_ops.readdir,symlink:J.node_ops.symlink},stream:{llseek:J.stream_ops.llseek}},file:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:{llseek:J.stream_ops.llseek,read:J.stream_ops.read,write:J.stream_ops.write,mmap:J.stream_ops.mmap,msync:J.stream_ops.msync}},link:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,readlink:J.node_ops.readlink},stream:{}},chrdev:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:i.chrdev_stream_ops}});var _=i.createNode(f,c,p,h);return i.isDir(_.mode)?(_.node_ops=J.ops_table.dir.node,_.stream_ops=J.ops_table.dir.stream,_.contents={}):i.isFile(_.mode)?(_.node_ops=J.ops_table.file.node,_.stream_ops=J.ops_table.file.stream,_.usedBytes=0,_.contents=J.emptyFileContents??(J.emptyFileContents=new Uint8Array(0))):i.isLink(_.mode)?(_.node_ops=J.ops_table.link.node,_.stream_ops=J.ops_table.link.stream):i.isChrdev(_.mode)&&(_.node_ops=J.ops_table.chrdev.node,_.stream_ops=J.ops_table.chrdev.stream),_.atime=_.mtime=_.ctime=Date.now(),f&&(f.contents[c]=_,f.atime=f.mtime=f.ctime=_.atime),_},getFileDataAsTypedArray(f){return f.contents.subarray(0,f.usedBytes)},expandFileStorage(f,c){var p=f.contents.length;if(!(p>=c)){var h=1024*1024;c=Math.max(c,p*(p<h?2:1.125)>>>0),p&&(c=Math.max(c,256));var _=J.getFileDataAsTypedArray(f);f.contents=new Uint8Array(c),f.contents.set(_)}},resizeFileStorage(f,c){if(f.usedBytes!=c){var p=f.contents;f.contents=new Uint8Array(c),f.contents.set(p.subarray(0,Math.min(c,f.usedBytes))),f.usedBytes=c}},node_ops:{getattr(f){var c={};return c.dev=i.isChrdev(f.mode)?f.id:1,c.ino=f.id,c.mode=f.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=f.rdev,i.isDir(f.mode)?c.size=4096:i.isFile(f.mode)?c.size=f.usedBytes:i.isLink(f.mode)?c.size=f.link.length:c.size=0,c.atime=new Date(f.atime),c.mtime=new Date(f.mtime),c.ctime=new Date(f.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(f,c){for(let p of["mode","atime","mtime","ctime"])c[p]!=null&&(f[p]=c[p]);c.size!==void 0&&J.resizeFileStorage(f,c.size)},lookup(f,c){throw J.doesNotExistError||(J.doesNotExistError=new i.ErrnoError(44),J.doesNotExistError.stack="<generic error, no stack>"),J.doesNotExistError},mknod(f,c,p,h){return J.createNode(f,c,p,h)},rename(f,c,p){var h;try{h=i.lookupNode(c,p)}catch{}if(h){if(i.isDir(f.mode))for(var _ in h.contents)throw new i.ErrnoError(55);i.hashRemoveNode(h)}delete f.parent.contents[f.name],c.contents[p]=f,f.name=p,c.ctime=c.mtime=f.parent.ctime=f.parent.mtime=Date.now()},unlink(f,c){delete f.contents[c],f.ctime=f.mtime=Date.now()},rmdir(f,c){var p=i.lookupNode(f,c);for(var h in p.contents)throw new i.ErrnoError(55);delete f.contents[c],f.ctime=f.mtime=Date.now()},readdir(f){return[".","..",...Object.keys(f.contents)]},symlink(f,c,p){var h=J.createNode(f,c,41471,0);return h.link=p,h},readlink(f){if(!i.isLink(f.mode))throw new i.ErrnoError(28);return f.link}},stream_ops:{read(f,c,p,h,_){var $=f.node.contents;if(_>=f.node.usedBytes)return 0;var K=Math.min(f.node.usedBytes-_,h);return c.set($.subarray(_,_+K),p),K},write(f,c,p,h,_,$){if(c.buffer===P0.buffer&&($=!1),!h)return 0;var K=f.node;return K.mtime=K.ctime=Date.now(),$?(K.contents=c.subarray(p,p+h),K.usedBytes=h):K.usedBytes===0&&_===0?(K.contents=c.slice(p,p+h),K.usedBytes=h):(J.expandFileStorage(K,_+h),K.contents.set(c.subarray(p,p+h),_),K.usedBytes=Math.max(K.usedBytes,_+h)),h},llseek(f,c,p){var h=c;if(p===1?h+=f.position:p===2&&i.isFile(f.node.mode)&&(h+=f.node.usedBytes),h<0)throw new i.ErrnoError(28);return h},mmap(f,c,p,h,_){if(!i.isFile(f.node.mode))throw new i.ErrnoError(43);var $,K,Y=f.node.contents;if(!(_&2)&&Y.buffer===P0.buffer)K=!1,$=Y.byteOffset;else{if(K=!0,$=BA(c),!$)throw new i.ErrnoError(48);Y&&((p>0||p+c<Y.length)&&(Y.subarray?Y=Y.subarray(p,p+c):Y=Array.prototype.slice.call(Y,p,p+c)),P0.set(Y,$))}return{ptr:$,allocated:K}},msync(f,c,p,h,_){return J.stream_ops.write(f,c,0,h,p,!1),0}}},mA=f=>{if(typeof f!="string")return f;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},p=c[f];if(typeof p>"u")throw new Error(`Unknown file open mode: ${f}`);return p},Yx=f=>(typeof f=="string"&&(f=EA(f,!0)),f.subarray||(f=new Uint8Array(f)),f),Qx=(f,c)=>{var p=0;return f&&(p|=365),c&&(p|=146),p},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(f){return j0.createNode(null,"/",f.opts.fs.lstat(f.opts.root).mode,0)},createNode(f,c,p,h){if(!i.isDir(p)&&!i.isFile(p)&&!i.isLink(p))throw new i.ErrnoError(y0.EINVAL);var _=i.createNode(f,c,p);return _.node_ops=j0.node_ops,_.stream_ops=j0.stream_ops,_},realPath(f){for(var c=[];f.parent!==f;)c.push(f.name),f=f.parent;return c.push(f.mount.opts.root),c.reverse(),a0.join(...c)},node_ops:{getattr(f){var c=j0.realPath(f),p;try{p=f.mount.opts.fs.lstat(c)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}return{dev:p.dev,ino:p.ino,mode:p.mode,nlink:p.nlink,uid:p.uid,gid:p.gid,rdev:p.rdev,size:p.size,atime:p.atime,mtime:p.mtime,ctime:p.ctime,blksize:p.blksize,blocks:p.blocks}},setattr(f,c){var p=j0.realPath(f);try{if(c.mode!==void 0&&(f.mount.opts.fs.chmod(p,c.mode),f.mode=c.mode),c.atime||c.mtime){var h=new Date(c.atime||c.mtime),_=new Date(c.mtime||c.atime);f.mount.opts.fs.utime(p,h,_)}c.size!==void 0&&f.mount.opts.fs.truncate(p,c.size)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},lookup(f,c){try{var p=a0.join2(j0.realPath(f),c),h=f.mount.opts.fs.lstat(p).mode,_=j0.createNode(f,c,h);return _}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},mknod(f,c,p,h){var _=j0.createNode(f,c,p,h),$=j0.realPath(_);try{i.isDir(_.mode)?_.mount.opts.fs.mkdir($,_.mode):_.mount.opts.fs.writeFile($,"",{mode:_.mode})}catch(K){throw K.code?new i.ErrnoError(y0[K.code]):K}return _},rename(f,c,p){var h=j0.realPath(f),_=a0.join2(j0.realPath(c),p);try{f.mount.opts.fs.rename(h,_),f.name=p}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},unlink(f,c){var p=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.unlink(p)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}},rmdir(f,c){var p=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.rmdir(p)}catch(h){throw h.code?new i.ErrnoError(y0[h.code]):h}},readdir(f){var c=j0.realPath(f);try{return f.mount.opts.fs.readdir(c)}catch(p){throw p.code?new i.ErrnoError(y0[p.code]):p}},symlink(f,c,p){var h=a0.join2(j0.realPath(f),c);try{f.mount.opts.fs.symlink(p,h)}catch(_){throw _.code?new i.ErrnoError(y0[_.code]):_}},readlink(f){var c=j0.realPath(f);try{return f.mount.opts.fs.readlink(c)}catch(p){throw p.code?new i.ErrnoError(y0[p.code]):p}}},stream_ops:{open(f){var c=j0.realPath(f.node);try{f.nfd=f.node.mount.opts.fs.open(c,f.flags)}catch(p){throw p.code?new i.ErrnoError(y0[p.code]):p}},close(f){try{f.node.mount.opts.fs.close(f.nfd)}catch(c){throw c.code?new i.ErrnoError(y0[c.code]):c}},read(f,c,p,h,_){try{return f.node.mount.opts.fs.read(f.nfd,c,p,h,_)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},write(f,c,p,h,_){try{return f.node.mount.opts.fs.write(f.nfd,c,p,h,_)}catch($){throw $.code?new i.ErrnoError(y0[$.code]):$}},llseek(f,c,p){var h=c;if(p===1)h+=f.position;else if(p===2&&i.isFile(f.node.mode))try{var _=f.node.node_ops.getattr(f.node);h+=_.size}catch($){throw new i.ErrnoError(y0[$.code])}if(h<0)throw new i.ErrnoError(y0.EINVAL);return h}}},cA=async f=>{var c=await S(f);return new Uint8Array(c)},rr=(...f)=>i.createDataFile(...f),jx=f=>f,Ax=0,_0=null,er=f=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var c=_0;_0=null,c()}},Sx=f=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(f,c)=>{typeof Browser<"u"&&Browser.init();for(var p of MA)if(p.canHandle(c))return p.handle(f,c);return f},iA=async(f,c,p,h,_,$,K,Y)=>{var l0=c?ix.resolve(a0.join2(f,c)):f,k0=jx(`cp ${l0}`);Sx(k0);try{var Q0=p;typeof p=="string"&&(Q0=await cA(p)),Q0=await CA(Q0,l0),Y?.(),$||rr(f,c,Q0,h,_,K)}finally{er(k0)}},ve=(f,c,p,h,_,$,K,Y,l0,k0)=>{iA(f,c,p,h,_,Y,l0,k0).then($).catch(K)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(f){xx(this,"name","ErrnoError"),this.errno=f}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(f){this.node=f}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(f){this.shared.flags=f}get position(){return this.shared.position}set position(f){this.shared.position=f}},FSNode:class{constructor(f,c,p,h){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),f||(f=this),this.parent=f,this.mount=f.mount,this.id=i.nextInode++,this.name=c,this.mode=p,this.rdev=h,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(f){f?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(f){f?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(f,c={}){if(!f)throw new i.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),a0.isAbs(f)||(f=i.cwd()+"/"+f);x:for(var p=0;p<40;p++){for(var h=f.split("/").filter(k0=>!!k0),_=i.root,$="/",K=0;K<h.length;K++){var Y=K===h.length-1;if(Y&&c.parent)break;if(h[K]!=="."){if(h[K]===".."){if($=a0.dirname($),i.isRoot(_)){f=$+"/"+h.slice(K+1).join("/"),p--;continue x}else _=_.parent;continue}$=a0.join2($,h[K]);try{_=i.lookupNode(_,h[K])}catch(k0){if(k0?.errno===44&&Y&&c.noent_okay)return{path:$};throw k0}if(i.isMountpoint(_)&&(!Y||c.follow_mount)&&(_=_.mounted.root),i.isLink(_.mode)&&(!Y||c.follow)){if(!_.node_ops.readlink)throw new i.ErrnoError(52);var l0=_.node_ops.readlink(_);a0.isAbs(l0)||(l0=a0.dirname($)+"/"+l0),f=l0+"/"+h.slice(K+1).join("/");continue x}}}return{path:$,node:_}}throw new i.ErrnoError(32)},getPath(f){for(var c;;){if(i.isRoot(f)){var p=f.mount.mountpoint;return c?p[p.length-1]!=="/"?`${p}/${c}`:p+c:p}c=c?`${f.name}/${c}`:f.name,f=f.parent}},hashName(f,c){for(var p=0,h=0;h<c.length;h++)p=(p<<5)-p+c.charCodeAt(h)|0;return(f+p>>>0)%i.nameTable.length},hashAddNode(f){var c=i.hashName(f.parent.id,f.name);f.name_next=i.nameTable[c],i.nameTable[c]=f},hashRemoveNode(f){var c=i.hashName(f.parent.id,f.name);if(i.nameTable[c]===f)i.nameTable[c]=f.name_next;else for(var p=i.nameTable[c];p;){if(p.name_next===f){p.name_next=f.name_next;break}p=p.name_next}},lookupNode(f,c){var p=i.mayLookup(f);if(p)throw new i.ErrnoError(p);for(var h=i.hashName(f.id,c),_=i.nameTable[h];_;_=_.name_next){var $=_.name;if(_.parent.id===f.id&&$===c)return _}return i.lookup(f,c)},createNode(f,c,p,h){var _=new i.FSNode(f,c,p,h);return i.hashAddNode(_),_},destroyNode(f){i.hashRemoveNode(f)},isRoot(f){return f===f.parent},isMountpoint(f){return!!f.mounted},isFile(f){return(f&61440)===32768},isDir(f){return(f&61440)===16384},isLink(f){return(f&61440)===40960},isChrdev(f){return(f&61440)===8192},isBlkdev(f){return(f&61440)===24576},isFIFO(f){return(f&61440)===4096},isSocket(f){return(f&49152)===49152},flagsToPermissionString(f){var c=["r","w","rw"][f&3];return f&512&&(c+="w"),c},nodePermissions(f,c){return i.ignorePermissions?0:c.includes("r")&&!(f.mode&292)||c.includes("w")&&!(f.mode&146)||c.includes("x")&&!(f.mode&73)?2:0},mayLookup(f){if(!i.isDir(f.mode))return 54;var c=i.nodePermissions(f,"x");return c||(f.node_ops.lookup?0:2)},mayCreate(f,c){if(!i.isDir(f.mode))return 54;try{var p=i.lookupNode(f,c);return 20}catch{}return i.nodePermissions(f,"wx")},mayDelete(f,c,p){var h;try{h=i.lookupNode(f,c)}catch($){return $.errno}var _=i.nodePermissions(f,"wx");if(_)return _;if(p){if(!i.isDir(h.mode))return 54;if(i.isRoot(h)||i.getPath(h)===i.cwd())return 10}else if(i.isDir(h.mode))return 31;return 0},mayOpen(f,c){if(!f)return 44;if(i.isLink(f.mode))return 32;var p=i.flagsToPermissionString(c);return i.isDir(f.mode)&&(p!=="r"||c&576)?31:i.nodePermissions(f,p)},checkOpExists(f,c){if(!f)throw new i.ErrnoError(c);return f},MAX_OPEN_FDS:4096,nextfd(){for(var f=0;f<=i.MAX_OPEN_FDS;f++)if(!i.streams[f])return f;throw new i.ErrnoError(33)},getStreamChecked(f){var c=i.getStream(f);if(!c)throw new i.ErrnoError(8);return c},getStream:f=>i.streams[f],createStream(f,c=-1){return f=Object.assign(new i.FSStream,f),c==-1&&(c=i.nextfd()),f.fd=c,i.streams[c]=f,f},closeStream(f){i.streams[f]=null},dupStream(f,c=-1){var p=i.createStream(f,c);return p.stream_ops?.dup?.(p),p},doSetAttr(f,c,p){var h=f?.stream_ops.setattr,_=h?f:c;h??(h=c.node_ops.setattr),i.checkOpExists(h,63);try{h(_,p)}catch($){throw $ instanceof RangeError?new i.ErrnoError(22):$}},chrdev_stream_ops:{open(f){var c=i.getDevice(f.node.rdev);f.stream_ops=c.stream_ops,f.stream_ops.open?.(f)},llseek(){throw new i.ErrnoError(70)}},major:f=>f>>8,minor:f=>f&255,makedev:(f,c)=>f<<8|c,registerDevice(f,c){i.devices[f]={stream_ops:c}},getDevice:f=>i.devices[f],getMounts(f){for(var c=[],p=[f];p.length;){var h=p.pop();c.push(h),p.push(...h.mounts)}return c},syncfs(f,c){typeof f=="function"&&(c=f,f=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var p=i.getMounts(i.root.mount),h=0;function _(Y){return i.syncFSRequests--,c(Y)}function $(Y){if(Y)return $.errored?void 0:($.errored=!0,_(Y));++h>=p.length&&_(null)}for(var K of p)K.type.syncfs?K.type.syncfs(K,f,$):$(null)},mount(f,c,p){var h=p==="/",_=!p,$;if(h&&i.root)throw new i.ErrnoError(10);if(!h&&!_){var K=i.lookupPath(p,{follow_mount:!1});if(p=K.path,$=K.node,i.isMountpoint($))throw new i.ErrnoError(10);if(!i.isDir($.mode))throw new i.ErrnoError(54)}var Y={type:f,opts:c,mountpoint:p,mounts:[]},l0=f.mount(Y);return l0.mount=Y,Y.root=l0,h?i.root=l0:$&&($.mounted=Y,$.mount&&$.mount.mounts.push(Y)),l0},unmount(f){var c=i.lookupPath(f,{follow_mount:!1});if(!i.isMountpoint(c.node))throw new i.ErrnoError(28);var p=c.node,h=p.mounted,_=i.getMounts(h);for(var[$,K]of Object.entries(i.nameTable))for(;K;){var Y=K.name_next;_.includes(K.mount)&&i.destroyNode(K),K=Y}p.mounted=null;var l0=p.mount.mounts.indexOf(h);p.mount.mounts.splice(l0,1)},lookup(f,c){return f.node_ops.lookup(f,c)},mknod(f,c,p){var h=i.lookupPath(f,{parent:!0}),_=h.node,$=a0.basename(f);if(!$)throw new i.ErrnoError(28);if($==="."||$==="..")throw new i.ErrnoError(20);var K=i.mayCreate(_,$);if(K)throw new i.ErrnoError(K);if(!_.node_ops.mknod)throw new i.ErrnoError(63);return _.node_ops.mknod(_,$,c,p)},statfs(f){return i.statfsNode(i.lookupPath(f,{follow:!0}).node)},statfsStream(f){return i.statfsNode(f.node)},statfsNode(f){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return f.node_ops.statfs&&Object.assign(c,f.node_ops.statfs(f.mount.opts.root)),c},create(f,c=438){return c&=4095,c|=32768,i.mknod(f,c,0)},mkdir(f,c=511){return c&=1023,c|=16384,i.mknod(f,c,0)},mkdirTree(f,c){var p=f.split("/"),h="";for(var _ of p)if(_){(h||a0.isAbs(f))&&(h+="/"),h+=_;try{i.mkdir(h,c)}catch($){if($.errno!=20)throw $}}},mkdev(f,c,p){return typeof p>"u"&&(p=c,c=438),c|=8192,i.mknod(f,c,p)},symlink(f,c){if(!ix.resolve(f))throw new i.ErrnoError(44);var p=i.lookupPath(c,{parent:!0}),h=p.node;if(!h)throw new i.ErrnoError(44);var _=a0.basename(c),$=i.mayCreate(h,_);if($)throw new i.ErrnoError($);if(!h.node_ops.symlink)throw new i.ErrnoError(63);return h.node_ops.symlink(h,_,f)},rename(f,c){var p=a0.dirname(f),h=a0.dirname(c),_=a0.basename(f),$=a0.basename(c),K,Y,l0;if(K=i.lookupPath(f,{parent:!0}),Y=K.node,K=i.lookupPath(c,{parent:!0}),l0=K.node,!Y||!l0)throw new i.ErrnoError(44);if(Y.mount!==l0.mount)throw new i.ErrnoError(75);var k0=i.lookupNode(Y,_),Q0=ix.relative(f,h);if(Q0.charAt(0)!==".")throw new i.ErrnoError(28);if(Q0=ix.relative(c,p),Q0.charAt(0)!==".")throw new i.ErrnoError(55);var H0;try{H0=i.lookupNode(l0,$)}catch{}if(k0!==H0){var R0=i.isDir(k0.mode),q0=i.mayDelete(Y,_,R0);if(q0)throw new i.ErrnoError(q0);if(q0=H0?i.mayDelete(l0,$,R0):i.mayCreate(l0,$),q0)throw new i.ErrnoError(q0);if(!Y.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(k0)||H0&&i.isMountpoint(H0))throw new i.ErrnoError(10);if(l0!==Y&&(q0=i.nodePermissions(Y,"w"),q0))throw new i.ErrnoError(q0);i.hashRemoveNode(k0);try{Y.node_ops.rename(k0,l0,$),k0.parent=l0}catch(vx){throw vx}finally{i.hashAddNode(k0)}}},rmdir(f){var c=i.lookupPath(f,{parent:!0}),p=c.node,h=a0.basename(f),_=i.lookupNode(p,h),$=i.mayDelete(p,h,!0);if($)throw new i.ErrnoError($);if(!p.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(_))throw new i.ErrnoError(10);p.node_ops.rmdir(p,h),i.destroyNode(_)},readdir(f){var c=i.lookupPath(f,{follow:!0}),p=c.node,h=i.checkOpExists(p.node_ops.readdir,54);return h(p)},unlink(f){var c=i.lookupPath(f,{parent:!0}),p=c.node;if(!p)throw new i.ErrnoError(44);var h=a0.basename(f),_=i.lookupNode(p,h),$=i.mayDelete(p,h,!1);if($)throw new i.ErrnoError($);if(!p.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(_))throw new i.ErrnoError(10);p.node_ops.unlink(p,h),i.destroyNode(_)},readlink(f){var c=i.lookupPath(f),p=c.node;if(!p)throw new i.ErrnoError(44);if(!p.node_ops.readlink)throw new i.ErrnoError(28);return p.node_ops.readlink(p)},stat(f,c){var p=i.lookupPath(f,{follow:!c}),h=p.node,_=i.checkOpExists(h.node_ops.getattr,63);return _(h)},fstat(f){var c=i.getStreamChecked(f),p=c.node,h=c.stream_ops.getattr,_=h?c:p;return h??(h=p.node_ops.getattr),i.checkOpExists(h,63),h(_)},lstat(f){return i.stat(f,!0)},doChmod(f,c,p,h){i.doSetAttr(f,c,{mode:p&4095|c.mode&-4096,ctime:Date.now(),dontFollow:h})},chmod(f,c,p){var h;if(typeof f=="string"){var _=i.lookupPath(f,{follow:!p});h=_.node}else h=f;i.doChmod(null,h,c,p)},lchmod(f,c){i.chmod(f,c,!0)},fchmod(f,c){var p=i.getStreamChecked(f);i.doChmod(p,p.node,c,!1)},doChown(f,c,p){i.doSetAttr(f,c,{timestamp:Date.now(),dontFollow:p})},chown(f,c,p,h){var _;if(typeof f=="string"){var $=i.lookupPath(f,{follow:!h});_=$.node}else _=f;i.doChown(null,_,h)},lchown(f,c,p){i.chown(f,c,p,!0)},fchown(f,c,p){var h=i.getStreamChecked(f);i.doChown(h,h.node,!1)},doTruncate(f,c,p){if(i.isDir(c.mode))throw new i.ErrnoError(31);if(!i.isFile(c.mode))throw new i.ErrnoError(28);var h=i.nodePermissions(c,"w");if(h)throw new i.ErrnoError(h);i.doSetAttr(f,c,{size:p,timestamp:Date.now()})},truncate(f,c){if(c<0)throw new i.ErrnoError(28);var p;if(typeof f=="string"){var h=i.lookupPath(f,{follow:!0});p=h.node}else p=f;i.doTruncate(null,p,c)},ftruncate(f,c){var p=i.getStreamChecked(f);if(c<0||(p.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(p,p.node,c)},utime(f,c,p){var h=i.lookupPath(f,{follow:!0}),_=h.node,$=i.checkOpExists(_.node_ops.setattr,63);$(_,{atime:c,mtime:p})},open(f,c,p=438){if(f==="")throw new i.ErrnoError(44);c=mA(c),c&64?p=p&4095|32768:p=0;var h,_;if(typeof f=="object")h=f;else{_=f.endsWith("/");var $=i.lookupPath(f,{follow:!(c&131072),noent_okay:!0});h=$.node,f=$.path}var K=!1;if(c&64)if(h){if(c&128)throw new i.ErrnoError(20)}else{if(_)throw new i.ErrnoError(31);h=i.mknod(f,p|511,0),K=!0}if(!h)throw new i.ErrnoError(44);if(i.isChrdev(h.mode)&&(c&=-513),c&65536&&!i.isDir(h.mode))throw new i.ErrnoError(54);if(!K){var Y=i.mayOpen(h,c);if(Y)throw new i.ErrnoError(Y)}c&512&&!K&&i.truncate(h,0),c&=-131713;var l0=i.createStream({node:h,path:i.getPath(h),flags:c,seekable:!0,position:0,stream_ops:h.stream_ops,ungotten:[],error:!1});return l0.stream_ops.open&&l0.stream_ops.open(l0),K&&i.chmod(h,p&511),l0},close(f){if(i.isClosed(f))throw new i.ErrnoError(8);f.getdents&&(f.getdents=null);try{f.stream_ops.close&&f.stream_ops.close(f)}catch(c){throw c}finally{i.closeStream(f.fd)}f.fd=null},isClosed(f){return f.fd===null},llseek(f,c,p){if(i.isClosed(f))throw new i.ErrnoError(8);if(!f.seekable||!f.stream_ops.llseek)throw new i.ErrnoError(70);if(p!=0&&p!=1&&p!=2)throw new i.ErrnoError(28);return f.position=f.stream_ops.llseek(f,c,p),f.ungotten=[],f.position},read(f,c,p,h,_){if(h<0||_<0)throw new i.ErrnoError(28);if(i.isClosed(f))throw new i.ErrnoError(8);if((f.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(f.node.mode))throw new i.ErrnoError(31);if(!f.stream_ops.read)throw new i.ErrnoError(28);var $=typeof _<"u";if(!$)_=f.position;else if(!f.seekable)throw new i.ErrnoError(70);var K=f.stream_ops.read(f,c,p,h,_);return $||(f.position+=K),K},write(f,c,p,h,_,$){if(h<0||_<0)throw new i.ErrnoError(28);if(i.isClosed(f))throw new i.ErrnoError(8);if((f.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(f.node.mode))throw new i.ErrnoError(31);if(!f.stream_ops.write)throw new i.ErrnoError(28);f.seekable&&f.flags&1024&&i.llseek(f,0,2);var K=typeof _<"u";if(!K)_=f.position;else if(!f.seekable)throw new i.ErrnoError(70);var Y=f.stream_ops.write(f,c,p,h,_,$);return K||(f.position+=Y),Y},mmap(f,c,p,h,_){if((h&2)!==0&&(_&2)===0&&(f.flags&2097155)!==2)throw new i.ErrnoError(2);if((f.flags&2097155)===1)throw new i.ErrnoError(2);if(!f.stream_ops.mmap)throw new i.ErrnoError(43);if(!c)throw new i.ErrnoError(28);return f.stream_ops.mmap(f,c,p,h,_)},msync(f,c,p,h,_){return f.stream_ops.msync?f.stream_ops.msync(f,c,p,h,_):0},ioctl(f,c,p){if(!f.stream_ops.ioctl)throw new i.ErrnoError(59);return f.stream_ops.ioctl(f,c,p)},readFile(f,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&b0(`Invalid encoding type "${c.encoding}"`);var p=i.open(f,c.flags),h=i.stat(f),_=h.size,$=new Uint8Array(_);return i.read(p,$,0,_,0),c.encoding==="utf8"&&($=wx($)),i.close(p),$},writeFile(f,c,p={}){p.flags=p.flags||577;var h=i.open(f,p.flags,p.mode);c=Yx(c),i.write(h,c,0,c.byteLength,void 0,p.canOwn),i.close(h)},cwd:()=>i.currentPath,chdir(f){var c=i.lookupPath(f,{follow:!0});if(c.node===null)throw new i.ErrnoError(44);if(!i.isDir(c.node.mode))throw new i.ErrnoError(54);var p=i.nodePermissions(c.node,"x");if(p)throw new i.ErrnoError(p);i.currentPath=c.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(h,_,$,K,Y)=>K,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var f=new Uint8Array(1024),c=0,p=()=>(c===0&&(xr(f),c=f.byteLength),f[--c]);i.createDevice("/dev","random",p),i.createDevice("/dev","urandom",p),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var f=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var c=i.createNode(f,"fd",16895,73);return c.stream_ops={llseek:J.stream_ops.llseek},c.node_ops={lookup(p,h){var _=+h,$=i.getStreamChecked(_),K={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:_+1};return K.parent=K,K},readdir(){return Array.from(i.streams.entries()).filter(([p,h])=>h).map(([p,h])=>p.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(f,c,p){f?i.createDevice("/dev","stdin",f):i.symlink("/dev/tty","/dev/stdin"),c?i.createDevice("/dev","stdout",null,c):i.symlink("/dev/tty","/dev/stdout"),p?i.createDevice("/dev","stderr",null,p):i.symlink("/dev/tty1","/dev/stderr");var h=i.open("/dev/stdin",0),_=i.open("/dev/stdout",1),$=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(J,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:J,PROXYFS:j0}},init(f,c,p){i.initialized=!0,f??(f=s.stdin),c??(c=s.stdout),p??(p=s.stderr),i.createStandardStreams(f,c,p)},quit(){i.initialized=!1,OA(0);for(var f of i.streams)f&&i.close(f)},findObject(f,c){var p=i.analyzePath(f,c);return p.exists?p.object:null},analyzePath(f,c){try{var p=i.lookupPath(f,{follow:!c});f=p.path}catch{}var h={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var p=i.lookupPath(f,{parent:!0});h.parentExists=!0,h.parentPath=p.path,h.parentObject=p.node,h.name=a0.basename(f),p=i.lookupPath(f,{follow:!c}),h.exists=!0,h.path=p.path,h.object=p.node,h.name=p.node.name,h.isRoot=p.path==="/"}catch(_){h.error=_.errno}return h},createPath(f,c,p,h){f=typeof f=="string"?f:i.getPath(f);for(var _=c.split("/").reverse();_.length;){var $=_.pop();if($){var K=a0.join2(f,$);try{i.mkdir(K)}catch(Y){if(Y.errno!=20)throw Y}f=K}}return K},createFile(f,c,p,h,_){var $=a0.join2(typeof f=="string"?f:i.getPath(f),c),K=Qx(h,_);return i.create($,K)},createDataFile(f,c,p,h,_,$){var K=c;f&&(f=typeof f=="string"?f:i.getPath(f),K=c?a0.join2(f,c):f);var Y=Qx(h,_),l0=i.create(K,Y);if(p){p=Yx(p),i.chmod(l0,Y|146);var k0=i.open(l0,577);i.write(k0,p,0,p.length,0,$),i.close(k0),i.chmod(l0,Y)}},createDevice(f,c,p,h){var _,$=a0.join2(typeof f=="string"?f:i.getPath(f),c),K=Qx(!!p,!!h);(_=i.createDevice).major??(_.major=64);var Y=i.makedev(i.createDevice.major++,0);return i.registerDevice(Y,{open(l0){l0.seekable=!1},close(l0){h?.buffer?.length&&h(10)},read(l0,k0,Q0,H0,R0){for(var q0=0,vx=0;vx<H0;vx++){var gx;try{gx=p()}catch{throw new i.ErrnoError(29)}if(gx===void 0&&q0===0)throw new i.ErrnoError(6);if(gx==null)break;q0++,k0[Q0+vx]=gx}return q0&&(l0.node.atime=Date.now()),q0},write(l0,k0,Q0,H0,R0){for(var q0=0;q0<H0;q0++)try{h(k0[Q0+q0])}catch{throw new i.ErrnoError(29)}return H0&&(l0.node.mtime=l0.node.ctime=Date.now()),q0}}),i.mkdev($,K,Y)},forceLoadFile(f){if(f.isDevice||f.isFolder||f.link||f.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{f.contents=P(f.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(f,c,p,h,_){class ${constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(R0){if(!(R0>this.length-1||R0<0)){var q0=R0%this.chunkSize,vx=R0/this.chunkSize|0;return this.getter(vx)[q0]}}setDataGetter(R0){this.getter=R0}cacheLength(){var R0=new XMLHttpRequest;R0.open("HEAD",p,!1),R0.send(null),R0.status>=200&&R0.status<300||R0.status===304||b0("Couldn't load "+p+". Status: "+R0.status);var q0=Number(R0.getResponseHeader("Content-length")),vx,gx=(vx=R0.getResponseHeader("Accept-Ranges"))&&vx==="bytes",Lx=(vx=R0.getResponseHeader("Content-Encoding"))&&vx==="gzip",Jx=1024*1024;gx||(Jx=q0);var zx=(Zx,aA)=>{Zx>aA&&b0("invalid range ("+Zx+", "+aA+") or no bytes requested!"),aA>q0-1&&b0("only "+q0+" bytes available! programmer error!");var Cx=new XMLHttpRequest;return Cx.open("GET",p,!1),q0!==Jx&&Cx.setRequestHeader("Range","bytes="+Zx+"-"+aA),Cx.responseType="arraybuffer",Cx.overrideMimeType&&Cx.overrideMimeType("text/plain; charset=x-user-defined"),Cx.send(null),Cx.status>=200&&Cx.status<300||Cx.status===304||b0("Couldn't load "+p+". Status: "+Cx.status),Cx.response!==void 0?new Uint8Array(Cx.response||[]):EA(Cx.responseText||"",!0)},KA=this;KA.setDataGetter(Zx=>{var aA=Zx*Jx,Cx=(Zx+1)*Jx-1;return Cx=Math.min(Cx,q0-1),typeof KA.chunks[Zx]>"u"&&(KA.chunks[Zx]=zx(aA,Cx)),typeof KA.chunks[Zx]>"u"&&b0("doXHR failed!"),KA.chunks[Zx]}),(Lx||!q0)&&(Jx=q0=1,q0=this.getter(0).length,Jx=q0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=q0,this._chunkSize=Jx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){E||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var K=new $,Y={isDevice:!1,contents:K}}else var Y={isDevice:!1,url:p};var l0=i.createFile(f,c,Y,h,_);Y.contents?l0.contents=Y.contents:Y.url&&(l0.contents=null,l0.url=Y.url),Object.defineProperties(l0,{usedBytes:{get:function(){return this.contents.length}}});var k0={};for(let[H0,R0]of Object.entries(l0.stream_ops))k0[H0]=(...q0)=>(i.forceLoadFile(l0),R0(...q0));function Q0(H0,R0,q0,vx,gx){var Lx=H0.node.contents;if(gx>=Lx.length)return 0;var Jx=Math.min(Lx.length-gx,vx);if(Lx.slice)for(var zx=0;zx<Jx;zx++)R0[q0+zx]=Lx[gx+zx];else for(var zx=0;zx<Jx;zx++)R0[q0+zx]=Lx.get(gx+zx);return Jx}return k0.read=(H0,R0,q0,vx,gx)=>(i.forceLoadFile(l0),Q0(H0,R0,q0,vx,gx)),k0.mmap=(H0,R0,q0,vx,gx)=>{i.forceLoadFile(l0);var Lx=BA(R0);if(!Lx)throw new i.ErrnoError(48);return Q0(H0,P0,Lx,R0,q0),{ptr:Lx,allocated:!0}},l0.stream_ops=k0,l0}},h0={currentUmask:18,calculateAt(f,c,p){if(a0.isAbs(c))return c;var h;if(f===-100)h=i.cwd();else{var _=h0.getStreamFromFD(f);h=_.path}if(c.length==0){if(!p)throw new i.ErrnoError(44);return h}return h+"/"+c},writeStat(f,c){C0[f>>2]=c.dev,C0[f+4>>2]=c.mode,C0[f+8>>2]=c.nlink,C0[f+12>>2]=c.uid,C0[f+16>>2]=c.gid,C0[f+20>>2]=c.rdev,Y0[f+24>>3]=BigInt(c.size),K0[f+32>>2]=4096,K0[f+36>>2]=c.blocks;var p=c.atime.getTime(),h=c.mtime.getTime(),_=c.ctime.getTime();return Y0[f+40>>3]=BigInt(Math.floor(p/1e3)),C0[f+48>>2]=p%1e3*1e3*1e3,Y0[f+56>>3]=BigInt(Math.floor(h/1e3)),C0[f+64>>2]=h%1e3*1e3*1e3,Y0[f+72>>3]=BigInt(Math.floor(_/1e3)),C0[f+80>>2]=_%1e3*1e3*1e3,Y0[f+88>>3]=BigInt(c.ino),0},writeStatFs(f,c){C0[f+4>>2]=c.bsize,C0[f+60>>2]=c.bsize,Y0[f+8>>3]=BigInt(c.blocks),Y0[f+16>>3]=BigInt(c.bfree),Y0[f+24>>3]=BigInt(c.bavail),Y0[f+32>>3]=BigInt(c.files),Y0[f+40>>3]=BigInt(c.ffree),C0[f+48>>2]=c.fsid,C0[f+64>>2]=c.flags,C0[f+56>>2]=c.namelen},doMsync(f,c,p,h,_){if(!i.isFile(c.node.mode))throw new i.ErrnoError(43);if(h&2)return 0;var $=tA.slice(f,f+p);i.msync(c,$,_,p,h)},getStreamFromFD(f){var c=i.getStreamChecked(f);return c},varargs:void 0,getStr(f){var c=Fx(f);return c}};function pr(f,c,p){h0.varargs=p;try{var h=h0.getStreamFromFD(f);switch(c){case 0:{var _=Hx();if(_<0)return-28;for(;i.streams[_];)_++;var $;return $=i.dupStream(h,_),$.fd}case 1:case 2:return 0;case 3:return h.flags;case 4:{var _=Hx(),K=289792;return h.flags=h.flags&~K|_&K,0}case 12:{var _=Kx(),Y=0;return V0[_+Y>>1]=2,0}case 13:case 14:return 0}return-28}catch(l0){if(typeof i>"u"||l0.name!=="ErrnoError")throw l0;return-l0.errno}}function hA(f,c,p){h0.varargs=p;try{var h=h0.getStreamFromFD(f);switch(c){case 21509:return h.tty?0:-59;case 21505:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcgets){var _=h.tty.ops.ioctl_tcgets(h),$=Kx();K0[$>>2]=_.c_iflag||0,K0[$+4>>2]=_.c_oflag||0,K0[$+8>>2]=_.c_cflag||0,K0[$+12>>2]=_.c_lflag||0;for(var K=0;K<32;K++)P0[$+K+17]=_.c_cc[K]||0;return 0}return 0}case 21510:case 21511:case 21512:return h.tty?0:-59;case 21506:case 21507:case 21508:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcsets){for(var $=Kx(),Y=K0[$>>2],l0=K0[$+4>>2],k0=K0[$+8>>2],Q0=K0[$+12>>2],H0=[],K=0;K<32;K++)H0.push(P0[$+K+17]);return h.tty.ops.ioctl_tcsets(h.tty,c,{c_iflag:Y,c_oflag:l0,c_cflag:k0,c_lflag:Q0,c_cc:H0})}return 0}case 21519:{if(!h.tty)return-59;var $=Kx();return K0[$>>2]=0,0}case 21520:return h.tty?-28:-59;case 21537:case 21531:{var $=Kx();return i.ioctl(h,c,$)}case 21523:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tiocgwinsz){var R0=h.tty.ops.ioctl_tiocgwinsz(h.tty),$=Kx();V0[$>>1]=R0[0],V0[$+2>>1]=R0[1]}return 0}case 21524:return h.tty?0:-59;case 21515:return h.tty?0:-59;default:return-28}}catch(q0){if(typeof i>"u"||q0.name!=="ErrnoError")throw q0;return-q0.errno}}function dA(f,c,p,h){h0.varargs=h;try{c=h0.getStr(c),c=h0.calculateAt(f,c);var _=h?Hx():0;return p&64&&(_&=~h0.currentUmask),i.open(c,p,_).fd}catch($){if(typeof i>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var fe=()=>2147483648,tr=(f,c)=>Math.ceil(f/c)*c,Lr=f=>{var c=gA.buffer.byteLength,p=(f-c+65535)/65536|0;try{return gA.grow(p),x0(),1}catch{}},Rr=f=>{var c=tA.length;f>>>=0;var p=fe();if(f>p)return!1;for(var h=1;h<=4;h*=2){var _=c*(1+.2/h);_=Math.min(_,f+100663296);var $=Math.min(p,tr(Math.max(f,_),65536)),K=Lr($);if(K)return!0}return!1};function le(f){try{var c=h0.getStreamFromFD(f);return i.close(c),0}catch(p){if(typeof i>"u"||p.name!=="ErrnoError")throw p;return p.errno}}var Ee=(f,c,p,h)=>{for(var _=0,$=0;$<p;$++){var K=C0[c>>2],Y=C0[c+4>>2];c+=8;var l0=i.read(f,P0,K,Y,h);if(l0<0)return-1;if(_+=l0,l0<Y)break;typeof h<"u"&&(h+=l0)}return _};function Be(f,c,p,h){try{var _=h0.getStreamFromFD(f),$=Ee(_,c,p);return C0[h>>2]=$,0}catch(K){if(typeof i>"u"||K.name!=="ErrnoError")throw K;return K.errno}}var nr=9007199254740992,Or=-9007199254740992,LA=f=>f<Or||f>nr?NaN:Number(f);function sr(f,c,p,h){c=LA(c);try{if(isNaN(c))return 22;var _=h0.getStreamFromFD(f);return i.llseek(_,c,p),Y0[h>>3]=BigInt(_.position),_.getdents&&c===0&&p===0&&(_.getdents=null),0}catch($){if(typeof i>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ce=(f,c,p,h)=>{for(var _=0,$=0;$<p;$++){var K=C0[c>>2],Y=C0[c+4>>2];c+=8;var l0=i.write(f,P0,K,Y,h);if(l0<0)return-1;if(_+=l0,l0<Y)break;typeof h<"u"&&(h+=l0)}return _};function Gr(f,c,p,h){try{var _=h0.getStreamFromFD(f),$=ce(_,c,p);return C0[h>>2]=$,0}catch(K){if(typeof i>"u"||K.name!=="ErrnoError")throw K;return K.errno}}var Ur=0,RA=()=>ZA||Ur>0,ir=f=>{R=f,RA()||(s.onExit?.(f),v0=!0),g(f,new sx(f))},br=(f,c)=>{R=f,RA()||E0(),ir(f)},Hr=f=>{if(f instanceof sx||f=="unwind")return R;g(1,f)},Kr=(f,c,p)=>Ar(f,tA,c,p),Jr=f=>GA(f),Ce=f=>{var c=lA(f)+1,p=Jr(c);return Kr(f,p,c),p},de=(...f)=>i.createPath(...f),ar=(...f)=>i.unlink(...f),De=(...f)=>i.createLazyFile(...f),ue=(...f)=>i.createDevice(...f);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(ZA=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(b=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.callMain=mx,s.addRunDependency=Sx,s.removeRunDependency=er,s.FS_preloadFile=iA,s.FS_unlink=ar,s.FS_createPath=de,s.FS_createDevice=ue,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=De,s.PROXYFS=j0;var zr,Vr,OA,Wr,GA,jr,Mx,pe,gA;function UA(f){zr=s._main=f.__main_argc_argv,Vr=f.__funcs_on_exit,OA=f.fflush,Wr=f._emscripten_stack_restore,GA=f._emscripten_stack_alloc,jr=f.emscripten_stack_get_current,Mx=gA=f.memory,pe=f.__indirect_function_table}var mr={__assert_fail:fA,__syscall_fcntl64:pr,__syscall_ioctl:hA,__syscall_openat:dA,emscripten_resize_heap:Rr,fd_close:le,fd_read:Be,fd_seek:sr,fd_write:Gr};function mx(f=[]){var c=zr;f.unshift(j);var p=f.length,h=Jr((p+1)*4),_=h;for(var $ of f)C0[_>>2]=Ce($),_+=4;C0[_>>2]=0;try{var K=c(p,h);return br(K,!0),K}catch(Y){return Hr(Y)}}function or(f=b){if(Ax>0){_0=or;return}if(f0(),Ax>0){_0=or;return}function c(){if(s.calledRun=!0,!v0){U(),H?.(s),s.onRuntimeInitialized?.();var p=s.noInitialRun||!0;p||mx(f),p0()}}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),c()},1)):c()}var HA;return HA=await O0(),or(),n0?a=s:a=new Promise((f,c)=>{H=f,W=c}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),ZB=Ts({"wasm/bin/pawnrun.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a,s=t,l=!!globalThis.window,E=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],j="./this.program",g=(F,n)=>{throw n};typeof __filename<"u"?e=__filename:E&&(e=self.location.href);var q="",S,P;if(D){var T=require("fs");q=__dirname+"/",P=F=>{F=R(F)?new URL(F):F;var n=T.readFileSync(F);return n},S=async(F,n=!0)=>{F=R(F)?new URL(F):F;var o=T.readFileSync(F,n?void 0:"utf8");return o},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(F,n)=>{throw process.exitCode=F,n}}else if(l||E){try{q=new URL(".",e).href}catch{}E&&(P=F=>{var n=new XMLHttpRequest;return n.open("GET",F,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),S=async F=>{if(R(F))return new Promise((o,v)=>{var B=new XMLHttpRequest;B.open("GET",F,!0),B.responseType="arraybuffer",B.onload=()=>{if(B.status==200||B.status==0&&B.response){o(B.response);return}v(B.status)},B.onerror=v,B.send(null)});var n=await fetch(F,{credentials:"same-origin"});if(n.ok)return n.arrayBuffer();throw new Error(n.status+" : "+n.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,v0=!1,R=F=>F.startsWith("file://");class k{}class O extends k{}function V(F){for(var n=0,o=F.length,v=new Uint8Array(o),B;n<o;++n)B=F.charCodeAt(n),v[n]=~B>>8&B;return v}var X,H,W=!1;function n0(){var F=hr.buffer;sx=new Int8Array(F),Ux=new Int16Array(F),s.HEAPU8=IA=new Uint8Array(F),Y0=new Uint16Array(F),s.HEAP32=U0=new Int32Array(F),s.HEAPU32=P0=new Uint32Array(F),V0=new Float32Array(F),K0=new Float64Array(F),O0=new BigInt64Array(F),ie=new BigUint64Array(F)}function e0(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)bA(s.preRun.shift());Nr(tA)}function x0(){W=!0,!s.noFSInit&&!i.initialized&&i.init(),z0.init(),JA.__wasm_call_ctors(),i.ignorePermissions=!1}function f0(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)ae(s.postRun.shift());Nr(C0)}function U(F){s.onAbort?.(F),F=`Aborted(${F})`,N(F),v0=!0,F+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(F);throw H?.(n),n}var F0;function E0(){return V(`\0asm\0\0\0\xD7#\`\x7F\x7F\x7F\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\0\x7F\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\x7F\0\`}}\`\x7F~~~~\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\x7F\0\`|}\`\x7F}\`|\x7F|\`\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\0|\`|\0\`}\x7F\x7F\`}}}\`\x7F}}\`}\x7F\`}\x7F}\`\x7F~~~\0\`\x7F~\`|\x7F}\`~\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xBE\fenvpr_js_has_dispatch\0envpr_js_dispatch\0env\r__assert_fail\0env\fpr_debug_out\0\0env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xD9\xD7\r\x07\0\0\0\v\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x07\x07\v\r\0\b\b\b\b\b\x07
|
|
1528
1528
|
\x07\0\b\0\0\0\0\0\x1B\f \v\x07\x07\0 \f ! "\f p]]\x07\x82\x80\x80\b\x7FA\xC0\xD2\v\x07\x9F'memory\0__wasm_call_ctors\0\f\rpr_set_limits\0\r\rpr_set_budget\0\bpr_close\0free\0\xD2pr_reset_run_state\0\x8F\x07pr_open\0pr_num_natives\0pr_native_name\0pr_register_all\0__indirect_function_table\0pr_num_publics\0pr_public_name\0pr_find_public\0\x07pr_exec\0\rpr_last_error\0\vpr_last_cip\0\x1B\vpr_last_frm\0pr_get_budget_used\0pr_raise_error\0pr_verify_addr\0\x07pr_addr\0 \fpr_data_size\0!\rpr_heap_alloc\0"\fpr_read_cell\0#\rpr_write_cell\0$\rpr_read_cells\0%pr_write_cells\0&pr_read_packed\0'pr_write_packed\0(pr_read_cstring\0)malloc\0\xD1pr_get_virtual_us\0\x90pr_set_virtual_us\0\x91pr_set_rand_seed\0\x92_emscripten_stack_restore\0\xE0_emscripten_stack_alloc\0\xE1emscripten_stack_get_current\0\xE2 o\0A\v\\*3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\x80\x81\x82\x83\x84\x85\xA4\xA5\xA6\xA7\xCC\xCD\xCE\f
|
|
1529
1529
|
\x9A\xE3\xD7\0\v\0A\xD4\xC9\0 6\0A\xD0\xC9\0 \x006\0A\xD0\xCC\0 6\0\v\v\0A\xD8\xC9\0 \x006\0\v]\0A\xD4\xCC\0-\0\0@A\xD0\xCD\0(\0\xD2A\xD4\xCC\0A\0:\0\0A\xD0\xCD\0A\x006\0A\xD4\xCD\0A\x006\0A\xD8\xCD\0A\x006\0A\xDC\xCD\0A\x006\0A\xE0\xCD\0A\x006\0A\xD8\xCC\0A\0A\xF8\0\xFC\v\0\x8F\vA\0\v\xBC\b\x7F~#\0A@j"$\0Aw!@A\xD4\xCC\0-\0\0\r\0A\x7F!#\0Ak"$\0@@A\xBFA\xBC,\0\0\xB5E@A\x88\xCEA6\0\f\vA!A\xBCA+\xB5E@A\xBC-\0\0A\xF2\0G!\v A\x80r A\xBCA\xF8\0\xB5\x1B"A\x80\x80 r A\xBCA\xE5\0\xB5\x1B" A\xC0\0rA\xBC-\0\0"A\xF2\0F\x1B"A\x80r A\xF7\0F\x1B"A\x80\br A\xE1\0F\x1B! B\xB67\0A\x9C\x7F \0 A\x80\x80r "\0A\x81\`O@A\x88\xCEA\0 \0k6\0A\x7F!\0\v \0A\0H\r \0!#\0A k"\x07$\0\x7F@@A\xBFA\xBC,\0\0\xB5E@A\x88\xCEA6\0\f\vA\x98 \xD1"\r\vA\0\f\v A\0A\x90\xA3A\xBCA+\xB5E@ A\bAA\xBC-\0\0A\xF2\0F\x1B6\0\v@A\xBC-\0\0A\xE1\0G@ (\0!\f\v AA\0"A\x80\bqE@ \x07 A\x80\br\xAC7 A \x07Aj\v (\0A\x80r"6\0\v A\x7F6P A\x80\b60 6< A\x98j6,@ A\bq\r\0 \x07 \x07Aj\xAD7\0 A\x93\xA8 \x07\r\0 A
|
|
1530
1530
|
6P\v A\xD6\x006( A\xD7\x006$ A\xD8\x006 A\xD9\x006\fA\x8D\xCE-\0\0E@ A\x7F6L\v A\xC8\xCE(\0"68 @ 64\vA\xC8\xCE 6\0 \v! \x07A j$\0 "\r \0 \vA\0!\v Aj$\0 "\0E\r\0 \0A\xAC@ \0\xA1\f\v\x7F \0((!@ \0B\0 \0-\0\0A\x80q\x7FAA \0( \0(F\x1BA\v
|
|
@@ -1958,8 +1958,8 @@ OW\xC6\xBF\xA0\x8E\v{"^\xF2?\0\x81\x9C\xC7+\xAA\xC1\xBF?4JJ\xBB\xF1?^\x8C\xCEv
|
|
|
1958
1958
|
\0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\0\x005\0\0\0q\0\0\0k\xFF\xFF\xFF\xCE\xFB\xFF\xFF\x92\xBF\xFF\xFF\0\0\0\0\0\0\0\0\0\v\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\v\0\0\0\0\0\0\0\0\0
|
|
1959
1959
|
|
|
1960
1960
|
|
|
1961
|
-
\x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\xC1\xC6\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xFB\xC6\0\v\f\0A\x87\xC7\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\xB5\xC7\0\v\0A\xC1\xC7\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xEF\xC7\0\v\0A\xFB\xC7\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\xB2\xC8\0\v\0\0\0\0\0\0\0\0\0 \0A\xE3\xC8\0\v\0A\xEF\xC8\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\x9D\xC9\0\v\0A\xA9\xC9\0\v'\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0A\xD2\xC9\0\v\0\0\0\0p\x99\0\x91\xF4E%,g\0\0@i`)}function
|
|
1962
|
-
`));if(!F)return null;Ix=EA(F,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(F,n){z0.ttys[F]={input:[],output:[],ops:n},i.registerDevice(F,z0.stream_ops)},stream_ops:{open(F){var n=z0.ttys[F.node.rdev];if(!n)throw new i.ErrnoError(43);F.tty=n,F.seekable=!1},close(F){F.tty.ops.fsync(F.tty)},fsync(F){F.tty.ops.fsync(F.tty)},read(F,n,o,v,E){if(!F.tty||!F.tty.ops.get_char)throw new i.ErrnoError(60);for(var d=0,m=0;m<v;m++){var w;try{w=F.tty.ops.get_char(F.tty)}catch{throw new i.ErrnoError(29)}if(w===void 0&&d===0)throw new i.ErrnoError(6);if(w==null)break;d++,n[o+m]=w}return d&&(F.node.atime=Date.now()),d},write(F,n,o,v,E){if(!F.tty||!F.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var d=0;d<v;d++)F.tty.ops.put_char(F.tty,n[o+d])}catch{throw new i.ErrnoError(29)}return v&&(F.node.mtime=F.node.ctime=Date.now()),d}},default_tty_ops:{get_char(F){return Fe()},put_char(F,n){n===null||n===10?(M(wx(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(M(wx(F.output)),F.output=[])},ioctl_tcgets(F){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(F,n,o){return 0},ioctl_tiocgwinsz(F){return[24,80]}},default_tty1_ops:{put_char(F,n){n===null||n===10?(N(wx(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(N(wx(F.output)),F.output=[])}}},BA=F=>{U()},K={ops_table:null,mount(F){return K.createNode(null,"/",16895,0)},createNode(F,n,o,v){if(i.isBlkdev(o)||i.isFIFO(o))throw new i.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:i.chrdev_stream_ops}});var E=i.createNode(F,n,o,v);return i.isDir(E.mode)?(E.node_ops=K.ops_table.dir.node,E.stream_ops=K.ops_table.dir.stream,E.contents={}):i.isFile(E.mode)?(E.node_ops=K.ops_table.file.node,E.stream_ops=K.ops_table.file.stream,E.usedBytes=0,E.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):i.isLink(E.mode)?(E.node_ops=K.ops_table.link.node,E.stream_ops=K.ops_table.link.stream):i.isChrdev(E.mode)&&(E.node_ops=K.ops_table.chrdev.node,E.stream_ops=K.ops_table.chrdev.stream),E.atime=E.mtime=E.ctime=Date.now(),F&&(F.contents[n]=E,F.atime=F.mtime=F.ctime=E.atime),E},getFileDataAsTypedArray(F){return F.contents.subarray(0,F.usedBytes)},expandFileStorage(F,n){var o=F.contents.length;if(!(o>=n)){var v=1024*1024;n=Math.max(n,o*(o<v?2:1.125)>>>0),o&&(n=Math.max(n,256));var E=K.getFileDataAsTypedArray(F);F.contents=new Uint8Array(n),F.contents.set(E)}},resizeFileStorage(F,n){if(F.usedBytes!=n){var o=F.contents;F.contents=new Uint8Array(n),F.contents.set(o.subarray(0,Math.min(n,F.usedBytes))),F.usedBytes=n}},node_ops:{getattr(F){var n={};return n.dev=i.isChrdev(F.mode)?F.id:1,n.ino=F.id,n.mode=F.mode,n.nlink=1,n.uid=0,n.gid=0,n.rdev=F.rdev,i.isDir(F.mode)?n.size=4096:i.isFile(F.mode)?n.size=F.usedBytes:i.isLink(F.mode)?n.size=F.link.length:n.size=0,n.atime=new Date(F.atime),n.mtime=new Date(F.mtime),n.ctime=new Date(F.ctime),n.blksize=4096,n.blocks=Math.ceil(n.size/n.blksize),n},setattr(F,n){for(let o of["mode","atime","mtime","ctime"])n[o]!=null&&(F[o]=n[o]);n.size!==void 0&&K.resizeFileStorage(F,n.size)},lookup(F,n){throw K.doesNotExistError||(K.doesNotExistError=new i.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(F,n,o,v){return K.createNode(F,n,o,v)},rename(F,n,o){var v;try{v=i.lookupNode(n,o)}catch{}if(v){if(i.isDir(F.mode))for(var E in v.contents)throw new i.ErrnoError(55);i.hashRemoveNode(v)}delete F.parent.contents[F.name],n.contents[o]=F,F.name=o,n.ctime=n.mtime=F.parent.ctime=F.parent.mtime=Date.now()},unlink(F,n){delete F.contents[n],F.ctime=F.mtime=Date.now()},rmdir(F,n){var o=i.lookupNode(F,n);for(var v in o.contents)throw new i.ErrnoError(55);delete F.contents[n],F.ctime=F.mtime=Date.now()},readdir(F){return[".","..",...Object.keys(F.contents)]},symlink(F,n,o){var v=K.createNode(F,n,41471,0);return v.link=o,v},readlink(F){if(!i.isLink(F.mode))throw new i.ErrnoError(28);return F.link}},stream_ops:{read(F,n,o,v,E){var d=F.node.contents;if(E>=F.node.usedBytes)return 0;var m=Math.min(F.node.usedBytes-E,v);return n.set(d.subarray(E,E+m),o),m},write(F,n,o,v,E,d){if(n.buffer===sx.buffer&&(d=!1),!v)return 0;var m=F.node;return m.mtime=m.ctime=Date.now(),d?(m.contents=n.subarray(o,o+v),m.usedBytes=v):m.usedBytes===0&&E===0?(m.contents=n.slice(o,o+v),m.usedBytes=v):(K.expandFileStorage(m,E+v),m.contents.set(n.subarray(o,o+v),E),m.usedBytes=Math.max(m.usedBytes,E+v)),v},llseek(F,n,o){var v=n;if(o===1?v+=F.position:o===2&&i.isFile(F.node.mode)&&(v+=F.node.usedBytes),v<0)throw new i.ErrnoError(28);return v},mmap(F,n,o,v,E){if(!i.isFile(F.node.mode))throw new i.ErrnoError(43);var d,m,w=F.node.contents;if(!(E&2)&&w.buffer===sx.buffer)m=!1,d=w.byteOffset;else{if(m=!0,d=BA(n),!d)throw new i.ErrnoError(48);w&&((o>0||o+n<w.length)&&(w.subarray?w=w.subarray(o,o+n):w=Array.prototype.slice.call(w,o,o+n)),sx.set(w,d))}return{ptr:d,allocated:m}},msync(F,n,o,v,E){return K.stream_ops.write(F,n,0,v,o,!1),0}}},mA=F=>{if(typeof F!="string")return F;var n={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},o=n[F];if(typeof o>"u")throw new Error(`Unknown file open mode: ${F}`);return o},Yx=F=>(typeof F=="string"&&(F=EA(F,!0)),F.subarray||(F=new Uint8Array(F)),F),Qx=(F,n)=>{var o=0;return F&&(o|=365),n&&(o|=146),o},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(F){return j0.createNode(null,"/",F.opts.fs.lstat(F.opts.root).mode,0)},createNode(F,n,o,v){if(!i.isDir(o)&&!i.isFile(o)&&!i.isLink(o))throw new i.ErrnoError(y0.EINVAL);var E=i.createNode(F,n,o);return E.node_ops=j0.node_ops,E.stream_ops=j0.stream_ops,E},realPath(F){for(var n=[];F.parent!==F;)n.push(F.name),F=F.parent;return n.push(F.mount.opts.root),n.reverse(),a0.join(...n)},node_ops:{getattr(F){var n=j0.realPath(F),o;try{o=F.mount.opts.fs.lstat(n)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}return{dev:o.dev,ino:o.ino,mode:o.mode,nlink:o.nlink,uid:o.uid,gid:o.gid,rdev:o.rdev,size:o.size,atime:o.atime,mtime:o.mtime,ctime:o.ctime,blksize:o.blksize,blocks:o.blocks}},setattr(F,n){var o=j0.realPath(F);try{if(n.mode!==void 0&&(F.mount.opts.fs.chmod(o,n.mode),F.mode=n.mode),n.atime||n.mtime){var v=new Date(n.atime||n.mtime),E=new Date(n.mtime||n.atime);F.mount.opts.fs.utime(o,v,E)}n.size!==void 0&&F.mount.opts.fs.truncate(o,n.size)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},lookup(F,n){try{var o=a0.join2(j0.realPath(F),n),v=F.mount.opts.fs.lstat(o).mode,E=j0.createNode(F,n,v);return E}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},mknod(F,n,o,v){var E=j0.createNode(F,n,o,v),d=j0.realPath(E);try{i.isDir(E.mode)?E.mount.opts.fs.mkdir(d,E.mode):E.mount.opts.fs.writeFile(d,"",{mode:E.mode})}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}return E},rename(F,n,o){var v=j0.realPath(F),E=a0.join2(j0.realPath(n),o);try{F.mount.opts.fs.rename(v,E),F.name=o}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},unlink(F,n){var o=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.unlink(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},rmdir(F,n){var o=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.rmdir(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},readdir(F){var n=j0.realPath(F);try{return F.mount.opts.fs.readdir(n)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},symlink(F,n,o){var v=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.symlink(o,v)}catch(E){throw E.code?new i.ErrnoError(y0[E.code]):E}},readlink(F){var n=j0.realPath(F);try{return F.mount.opts.fs.readlink(n)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}}},stream_ops:{open(F){var n=j0.realPath(F.node);try{F.nfd=F.node.mount.opts.fs.open(n,F.flags)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},close(F){try{F.node.mount.opts.fs.close(F.nfd)}catch(n){throw n.code?new i.ErrnoError(y0[n.code]):n}},read(F,n,o,v,E){try{return F.node.mount.opts.fs.read(F.nfd,n,o,v,E)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},write(F,n,o,v,E){try{return F.node.mount.opts.fs.write(F.nfd,n,o,v,E)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},llseek(F,n,o){var v=n;if(o===1)v+=F.position;else if(o===2&&i.isFile(F.node.mode))try{var E=F.node.node_ops.getattr(F.node);v+=E.size}catch(d){throw new i.ErrnoError(y0[d.code])}if(v<0)throw new i.ErrnoError(y0.EINVAL);return v}}},cA=async F=>{var n=await S(F);return new Uint8Array(n)},rr=(...F)=>i.createDataFile(...F),jx=F=>F,Ax=0,_0=null,er=F=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var n=_0;_0=null,n()}},Sx=F=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(F,n)=>{typeof Browser<"u"&&Browser.init();for(var o of MA)if(o.canHandle(n))return o.handle(F,n);return F},iA=async(F,n,o,v,E,d,m,w)=>{var I=n?ix.resolve(a0.join2(F,n)):F,Q=jx(`cp ${I}`);Sx(Q);try{var d0=o;typeof o=="string"&&(d0=await cA(o)),d0=await CA(d0,I),w?.(),d||rr(F,n,d0,v,E,m)}finally{er(Q)}},ve=(F,n,o,v,E,d,m,w,I,Q)=>{iA(F,n,o,v,E,w,I,Q).then(d).catch(m)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(F){xx(this,"name","ErrnoError"),this.errno=F}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(F){this.node=F}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(F){this.shared.flags=F}get position(){return this.shared.position}set position(F){this.shared.position=F}},FSNode:class{constructor(F,n,o,v){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),F||(F=this),this.parent=F,this.mount=F.mount,this.id=i.nextInode++,this.name=n,this.mode=o,this.rdev=v,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(F){F?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(F){F?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(F,n={}){if(!F)throw new i.ErrnoError(44);n.follow_mount??(n.follow_mount=!0),a0.isAbs(F)||(F=i.cwd()+"/"+F);x:for(var o=0;o<40;o++){for(var v=F.split("/").filter(Q=>!!Q),E=i.root,d="/",m=0;m<v.length;m++){var w=m===v.length-1;if(w&&n.parent)break;if(v[m]!=="."){if(v[m]===".."){if(d=a0.dirname(d),i.isRoot(E)){F=d+"/"+v.slice(m+1).join("/"),o--;continue x}else E=E.parent;continue}d=a0.join2(d,v[m]);try{E=i.lookupNode(E,v[m])}catch(Q){if(Q?.errno===44&&w&&n.noent_okay)return{path:d};throw Q}if(i.isMountpoint(E)&&(!w||n.follow_mount)&&(E=E.mounted.root),i.isLink(E.mode)&&(!w||n.follow)){if(!E.node_ops.readlink)throw new i.ErrnoError(52);var I=E.node_ops.readlink(E);a0.isAbs(I)||(I=a0.dirname(d)+"/"+I),F=I+"/"+v.slice(m+1).join("/");continue x}}}return{path:d,node:E}}throw new i.ErrnoError(32)},getPath(F){for(var n;;){if(i.isRoot(F)){var o=F.mount.mountpoint;return n?o[o.length-1]!=="/"?`${o}/${n}`:o+n:o}n=n?`${F.name}/${n}`:F.name,F=F.parent}},hashName(F,n){for(var o=0,v=0;v<n.length;v++)o=(o<<5)-o+n.charCodeAt(v)|0;return(F+o>>>0)%i.nameTable.length},hashAddNode(F){var n=i.hashName(F.parent.id,F.name);F.name_next=i.nameTable[n],i.nameTable[n]=F},hashRemoveNode(F){var n=i.hashName(F.parent.id,F.name);if(i.nameTable[n]===F)i.nameTable[n]=F.name_next;else for(var o=i.nameTable[n];o;){if(o.name_next===F){o.name_next=F.name_next;break}o=o.name_next}},lookupNode(F,n){var o=i.mayLookup(F);if(o)throw new i.ErrnoError(o);for(var v=i.hashName(F.id,n),E=i.nameTable[v];E;E=E.name_next){var d=E.name;if(E.parent.id===F.id&&d===n)return E}return i.lookup(F,n)},createNode(F,n,o,v){var E=new i.FSNode(F,n,o,v);return i.hashAddNode(E),E},destroyNode(F){i.hashRemoveNode(F)},isRoot(F){return F===F.parent},isMountpoint(F){return!!F.mounted},isFile(F){return(F&61440)===32768},isDir(F){return(F&61440)===16384},isLink(F){return(F&61440)===40960},isChrdev(F){return(F&61440)===8192},isBlkdev(F){return(F&61440)===24576},isFIFO(F){return(F&61440)===4096},isSocket(F){return(F&49152)===49152},flagsToPermissionString(F){var n=["r","w","rw"][F&3];return F&512&&(n+="w"),n},nodePermissions(F,n){return i.ignorePermissions?0:n.includes("r")&&!(F.mode&292)||n.includes("w")&&!(F.mode&146)||n.includes("x")&&!(F.mode&73)?2:0},mayLookup(F){if(!i.isDir(F.mode))return 54;var n=i.nodePermissions(F,"x");return n||(F.node_ops.lookup?0:2)},mayCreate(F,n){if(!i.isDir(F.mode))return 54;try{var o=i.lookupNode(F,n);return 20}catch{}return i.nodePermissions(F,"wx")},mayDelete(F,n,o){var v;try{v=i.lookupNode(F,n)}catch(d){return d.errno}var E=i.nodePermissions(F,"wx");if(E)return E;if(o){if(!i.isDir(v.mode))return 54;if(i.isRoot(v)||i.getPath(v)===i.cwd())return 10}else if(i.isDir(v.mode))return 31;return 0},mayOpen(F,n){if(!F)return 44;if(i.isLink(F.mode))return 32;var o=i.flagsToPermissionString(n);return i.isDir(F.mode)&&(o!=="r"||n&576)?31:i.nodePermissions(F,o)},checkOpExists(F,n){if(!F)throw new i.ErrnoError(n);return F},MAX_OPEN_FDS:4096,nextfd(){for(var F=0;F<=i.MAX_OPEN_FDS;F++)if(!i.streams[F])return F;throw new i.ErrnoError(33)},getStreamChecked(F){var n=i.getStream(F);if(!n)throw new i.ErrnoError(8);return n},getStream:F=>i.streams[F],createStream(F,n=-1){return F=Object.assign(new i.FSStream,F),n==-1&&(n=i.nextfd()),F.fd=n,i.streams[n]=F,F},closeStream(F){i.streams[F]=null},dupStream(F,n=-1){var o=i.createStream(F,n);return o.stream_ops?.dup?.(o),o},doSetAttr(F,n,o){var v=F?.stream_ops.setattr,E=v?F:n;v??(v=n.node_ops.setattr),i.checkOpExists(v,63);try{v(E,o)}catch(d){throw d instanceof RangeError?new i.ErrnoError(22):d}},chrdev_stream_ops:{open(F){var n=i.getDevice(F.node.rdev);F.stream_ops=n.stream_ops,F.stream_ops.open?.(F)},llseek(){throw new i.ErrnoError(70)}},major:F=>F>>8,minor:F=>F&255,makedev:(F,n)=>F<<8|n,registerDevice(F,n){i.devices[F]={stream_ops:n}},getDevice:F=>i.devices[F],getMounts(F){for(var n=[],o=[F];o.length;){var v=o.pop();n.push(v),o.push(...v.mounts)}return n},syncfs(F,n){typeof F=="function"&&(n=F,F=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var o=i.getMounts(i.root.mount),v=0;function E(w){return i.syncFSRequests--,n(w)}function d(w){if(w)return d.errored?void 0:(d.errored=!0,E(w));++v>=o.length&&E(null)}for(var m of o)m.type.syncfs?m.type.syncfs(m,F,d):d(null)},mount(F,n,o){var v=o==="/",E=!o,d;if(v&&i.root)throw new i.ErrnoError(10);if(!v&&!E){var m=i.lookupPath(o,{follow_mount:!1});if(o=m.path,d=m.node,i.isMountpoint(d))throw new i.ErrnoError(10);if(!i.isDir(d.mode))throw new i.ErrnoError(54)}var w={type:F,opts:n,mountpoint:o,mounts:[]},I=F.mount(w);return I.mount=w,w.root=I,v?i.root=I:d&&(d.mounted=w,d.mount&&d.mount.mounts.push(w)),I},unmount(F){var n=i.lookupPath(F,{follow_mount:!1});if(!i.isMountpoint(n.node))throw new i.ErrnoError(28);var o=n.node,v=o.mounted,E=i.getMounts(v);for(var[d,m]of Object.entries(i.nameTable))for(;m;){var w=m.name_next;E.includes(m.mount)&&i.destroyNode(m),m=w}o.mounted=null;var I=o.mount.mounts.indexOf(v);o.mount.mounts.splice(I,1)},lookup(F,n){return F.node_ops.lookup(F,n)},mknod(F,n,o){var v=i.lookupPath(F,{parent:!0}),E=v.node,d=a0.basename(F);if(!d)throw new i.ErrnoError(28);if(d==="."||d==="..")throw new i.ErrnoError(20);var m=i.mayCreate(E,d);if(m)throw new i.ErrnoError(m);if(!E.node_ops.mknod)throw new i.ErrnoError(63);return E.node_ops.mknod(E,d,n,o)},statfs(F){return i.statfsNode(i.lookupPath(F,{follow:!0}).node)},statfsStream(F){return i.statfsNode(F.node)},statfsNode(F){var n={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return F.node_ops.statfs&&Object.assign(n,F.node_ops.statfs(F.mount.opts.root)),n},create(F,n=438){return n&=4095,n|=32768,i.mknod(F,n,0)},mkdir(F,n=511){return n&=1023,n|=16384,i.mknod(F,n,0)},mkdirTree(F,n){var o=F.split("/"),v="";for(var E of o)if(E){(v||a0.isAbs(F))&&(v+="/"),v+=E;try{i.mkdir(v,n)}catch(d){if(d.errno!=20)throw d}}},mkdev(F,n,o){return typeof o>"u"&&(o=n,n=438),n|=8192,i.mknod(F,n,o)},symlink(F,n){if(!ix.resolve(F))throw new i.ErrnoError(44);var o=i.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new i.ErrnoError(44);var E=a0.basename(n),d=i.mayCreate(v,E);if(d)throw new i.ErrnoError(d);if(!v.node_ops.symlink)throw new i.ErrnoError(63);return v.node_ops.symlink(v,E,F)},rename(F,n){var o=a0.dirname(F),v=a0.dirname(n),E=a0.basename(F),d=a0.basename(n),m,w,I;if(m=i.lookupPath(F,{parent:!0}),w=m.node,m=i.lookupPath(n,{parent:!0}),I=m.node,!w||!I)throw new i.ErrnoError(44);if(w.mount!==I.mount)throw new i.ErrnoError(75);var Q=i.lookupNode(w,E),d0=ix.relative(F,v);if(d0.charAt(0)!==".")throw new i.ErrnoError(28);if(d0=ix.relative(n,o),d0.charAt(0)!==".")throw new i.ErrnoError(55);var g0;try{g0=i.lookupNode(I,d)}catch{}if(Q!==g0){var D0=i.isDir(Q.mode),B0=i.mayDelete(w,E,D0);if(B0)throw new i.ErrnoError(B0);if(B0=g0?i.mayDelete(I,d,D0):i.mayCreate(I,d),B0)throw new i.ErrnoError(B0);if(!w.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(Q)||g0&&i.isMountpoint(g0))throw new i.ErrnoError(10);if(I!==w&&(B0=i.nodePermissions(w,"w"),B0))throw new i.ErrnoError(B0);i.hashRemoveNode(Q);try{w.node_ops.rename(Q,I,d),Q.parent=I}catch(c0){throw c0}finally{i.hashAddNode(Q)}}},rmdir(F){var n=i.lookupPath(F,{parent:!0}),o=n.node,v=a0.basename(F),E=i.lookupNode(o,v),d=i.mayDelete(o,v,!0);if(d)throw new i.ErrnoError(d);if(!o.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(E))throw new i.ErrnoError(10);o.node_ops.rmdir(o,v),i.destroyNode(E)},readdir(F){var n=i.lookupPath(F,{follow:!0}),o=n.node,v=i.checkOpExists(o.node_ops.readdir,54);return v(o)},unlink(F){var n=i.lookupPath(F,{parent:!0}),o=n.node;if(!o)throw new i.ErrnoError(44);var v=a0.basename(F),E=i.lookupNode(o,v),d=i.mayDelete(o,v,!1);if(d)throw new i.ErrnoError(d);if(!o.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(E))throw new i.ErrnoError(10);o.node_ops.unlink(o,v),i.destroyNode(E)},readlink(F){var n=i.lookupPath(F),o=n.node;if(!o)throw new i.ErrnoError(44);if(!o.node_ops.readlink)throw new i.ErrnoError(28);return o.node_ops.readlink(o)},stat(F,n){var o=i.lookupPath(F,{follow:!n}),v=o.node,E=i.checkOpExists(v.node_ops.getattr,63);return E(v)},fstat(F){var n=i.getStreamChecked(F),o=n.node,v=n.stream_ops.getattr,E=v?n:o;return v??(v=o.node_ops.getattr),i.checkOpExists(v,63),v(E)},lstat(F){return i.stat(F,!0)},doChmod(F,n,o,v){i.doSetAttr(F,n,{mode:o&4095|n.mode&-4096,ctime:Date.now(),dontFollow:v})},chmod(F,n,o){var v;if(typeof F=="string"){var E=i.lookupPath(F,{follow:!o});v=E.node}else v=F;i.doChmod(null,v,n,o)},lchmod(F,n){i.chmod(F,n,!0)},fchmod(F,n){var o=i.getStreamChecked(F);i.doChmod(o,o.node,n,!1)},doChown(F,n,o){i.doSetAttr(F,n,{timestamp:Date.now(),dontFollow:o})},chown(F,n,o,v){var E;if(typeof F=="string"){var d=i.lookupPath(F,{follow:!v});E=d.node}else E=F;i.doChown(null,E,v)},lchown(F,n,o){i.chown(F,n,o,!0)},fchown(F,n,o){var v=i.getStreamChecked(F);i.doChown(v,v.node,!1)},doTruncate(F,n,o){if(i.isDir(n.mode))throw new i.ErrnoError(31);if(!i.isFile(n.mode))throw new i.ErrnoError(28);var v=i.nodePermissions(n,"w");if(v)throw new i.ErrnoError(v);i.doSetAttr(F,n,{size:o,timestamp:Date.now()})},truncate(F,n){if(n<0)throw new i.ErrnoError(28);var o;if(typeof F=="string"){var v=i.lookupPath(F,{follow:!0});o=v.node}else o=F;i.doTruncate(null,o,n)},ftruncate(F,n){var o=i.getStreamChecked(F);if(n<0||(o.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(o,o.node,n)},utime(F,n,o){var v=i.lookupPath(F,{follow:!0}),E=v.node,d=i.checkOpExists(E.node_ops.setattr,63);d(E,{atime:n,mtime:o})},open(F,n,o=438){if(F==="")throw new i.ErrnoError(44);n=mA(n),n&64?o=o&4095|32768:o=0;var v,E;if(typeof F=="object")v=F;else{E=F.endsWith("/");var d=i.lookupPath(F,{follow:!(n&131072),noent_okay:!0});v=d.node,F=d.path}var m=!1;if(n&64)if(v){if(n&128)throw new i.ErrnoError(20)}else{if(E)throw new i.ErrnoError(31);v=i.mknod(F,o|511,0),m=!0}if(!v)throw new i.ErrnoError(44);if(i.isChrdev(v.mode)&&(n&=-513),n&65536&&!i.isDir(v.mode))throw new i.ErrnoError(54);if(!m){var w=i.mayOpen(v,n);if(w)throw new i.ErrnoError(w)}n&512&&!m&&i.truncate(v,0),n&=-131713;var I=i.createStream({node:v,path:i.getPath(v),flags:n,seekable:!0,position:0,stream_ops:v.stream_ops,ungotten:[],error:!1});return I.stream_ops.open&&I.stream_ops.open(I),m&&i.chmod(v,o&511),I},close(F){if(i.isClosed(F))throw new i.ErrnoError(8);F.getdents&&(F.getdents=null);try{F.stream_ops.close&&F.stream_ops.close(F)}catch(n){throw n}finally{i.closeStream(F.fd)}F.fd=null},isClosed(F){return F.fd===null},llseek(F,n,o){if(i.isClosed(F))throw new i.ErrnoError(8);if(!F.seekable||!F.stream_ops.llseek)throw new i.ErrnoError(70);if(o!=0&&o!=1&&o!=2)throw new i.ErrnoError(28);return F.position=F.stream_ops.llseek(F,n,o),F.ungotten=[],F.position},read(F,n,o,v,E){if(v<0||E<0)throw new i.ErrnoError(28);if(i.isClosed(F))throw new i.ErrnoError(8);if((F.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(F.node.mode))throw new i.ErrnoError(31);if(!F.stream_ops.read)throw new i.ErrnoError(28);var d=typeof E<"u";if(!d)E=F.position;else if(!F.seekable)throw new i.ErrnoError(70);var m=F.stream_ops.read(F,n,o,v,E);return d||(F.position+=m),m},write(F,n,o,v,E,d){if(v<0||E<0)throw new i.ErrnoError(28);if(i.isClosed(F))throw new i.ErrnoError(8);if((F.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(F.node.mode))throw new i.ErrnoError(31);if(!F.stream_ops.write)throw new i.ErrnoError(28);F.seekable&&F.flags&1024&&i.llseek(F,0,2);var m=typeof E<"u";if(!m)E=F.position;else if(!F.seekable)throw new i.ErrnoError(70);var w=F.stream_ops.write(F,n,o,v,E,d);return m||(F.position+=w),w},mmap(F,n,o,v,E){if((v&2)!==0&&(E&2)===0&&(F.flags&2097155)!==2)throw new i.ErrnoError(2);if((F.flags&2097155)===1)throw new i.ErrnoError(2);if(!F.stream_ops.mmap)throw new i.ErrnoError(43);if(!n)throw new i.ErrnoError(28);return F.stream_ops.mmap(F,n,o,v,E)},msync(F,n,o,v,E){return F.stream_ops.msync?F.stream_ops.msync(F,n,o,v,E):0},ioctl(F,n,o){if(!F.stream_ops.ioctl)throw new i.ErrnoError(59);return F.stream_ops.ioctl(F,n,o)},readFile(F,n={}){n.flags=n.flags||0,n.encoding=n.encoding||"binary",n.encoding!=="utf8"&&n.encoding!=="binary"&&U(`Invalid encoding type "${n.encoding}"`);var o=i.open(F,n.flags),v=i.stat(F),E=v.size,d=new Uint8Array(E);return i.read(o,d,0,E,0),n.encoding==="utf8"&&(d=wx(d)),i.close(o),d},writeFile(F,n,o={}){o.flags=o.flags||577;var v=i.open(F,o.flags,o.mode);n=Yx(n),i.write(v,n,0,n.byteLength,void 0,o.canOwn),i.close(v)},cwd:()=>i.currentPath,chdir(F){var n=i.lookupPath(F,{follow:!0});if(n.node===null)throw new i.ErrnoError(44);if(!i.isDir(n.node.mode))throw new i.ErrnoError(54);var o=i.nodePermissions(n.node,"x");if(o)throw new i.ErrnoError(o);i.currentPath=n.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(v,E,d,m,w)=>m,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var F=new Uint8Array(1024),n=0,o=()=>(n===0&&(xr(F),n=F.byteLength),F[--n]);i.createDevice("/dev","random",o),i.createDevice("/dev","urandom",o),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var F=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var n=i.createNode(F,"fd",16895,73);return n.stream_ops={llseek:K.stream_ops.llseek},n.node_ops={lookup(o,v){var E=+v,d=i.getStreamChecked(E),m={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>d.path},id:E+1};return m.parent=m,m},readdir(){return Array.from(i.streams.entries()).filter(([o,v])=>v).map(([o,v])=>o.toString())}},n}},{},"/proc/self/fd")},createStandardStreams(F,n,o){F?i.createDevice("/dev","stdin",F):i.symlink("/dev/tty","/dev/stdin"),n?i.createDevice("/dev","stdout",null,n):i.symlink("/dev/tty","/dev/stdout"),o?i.createDevice("/dev","stderr",null,o):i.symlink("/dev/tty1","/dev/stderr");var v=i.open("/dev/stdin",0),E=i.open("/dev/stdout",1),d=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(K,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:K,PROXYFS:j0}},init(F,n,o){i.initialized=!0,F??(F=s.stdin),n??(n=s.stdout),o??(o=s.stderr),i.createStandardStreams(F,n,o)},quit(){i.initialized=!1;for(var F of i.streams)F&&i.close(F)},findObject(F,n){var o=i.analyzePath(F,n);return o.exists?o.object:null},analyzePath(F,n){try{var o=i.lookupPath(F,{follow:!n});F=o.path}catch{}var v={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var o=i.lookupPath(F,{parent:!0});v.parentExists=!0,v.parentPath=o.path,v.parentObject=o.node,v.name=a0.basename(F),o=i.lookupPath(F,{follow:!n}),v.exists=!0,v.path=o.path,v.object=o.node,v.name=o.node.name,v.isRoot=o.path==="/"}catch(E){v.error=E.errno}return v},createPath(F,n,o,v){F=typeof F=="string"?F:i.getPath(F);for(var E=n.split("/").reverse();E.length;){var d=E.pop();if(d){var m=a0.join2(F,d);try{i.mkdir(m)}catch(w){if(w.errno!=20)throw w}F=m}}return m},createFile(F,n,o,v,E){var d=a0.join2(typeof F=="string"?F:i.getPath(F),n),m=Qx(v,E);return i.create(d,m)},createDataFile(F,n,o,v,E,d){var m=n;F&&(F=typeof F=="string"?F:i.getPath(F),m=n?a0.join2(F,n):F);var w=Qx(v,E),I=i.create(m,w);if(o){o=Yx(o),i.chmod(I,w|146);var Q=i.open(I,577);i.write(Q,o,0,o.length,0,d),i.close(Q),i.chmod(I,w)}},createDevice(F,n,o,v){var E,d=a0.join2(typeof F=="string"?F:i.getPath(F),n),m=Qx(!!o,!!v);(E=i.createDevice).major??(E.major=64);var w=i.makedev(i.createDevice.major++,0);return i.registerDevice(w,{open(I){I.seekable=!1},close(I){v?.buffer?.length&&v(10)},read(I,Q,d0,g0,D0){for(var B0=0,c0=0;c0<g0;c0++){var I0;try{I0=o()}catch{throw new i.ErrnoError(29)}if(I0===void 0&&B0===0)throw new i.ErrnoError(6);if(I0==null)break;B0++,Q[d0+c0]=I0}return B0&&(I.node.atime=Date.now()),B0},write(I,Q,d0,g0,D0){for(var B0=0;B0<g0;B0++)try{v(Q[d0+B0])}catch{throw new i.ErrnoError(29)}return g0&&(I.node.mtime=I.node.ctime=Date.now()),B0}}),i.mkdev(d,m,w)},forceLoadFile(F){if(F.isDevice||F.isFolder||F.link||F.contents)return!0;if(globalThis.XMLHttpRequest)U("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{F.contents=P(F.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(F,n,o,v,E){class d{constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(D0){if(!(D0>this.length-1||D0<0)){var B0=D0%this.chunkSize,c0=D0/this.chunkSize|0;return this.getter(c0)[B0]}}setDataGetter(D0){this.getter=D0}cacheLength(){var D0=new XMLHttpRequest;D0.open("HEAD",o,!1),D0.send(null),D0.status>=200&&D0.status<300||D0.status===304||U("Couldn't load "+o+". Status: "+D0.status);var B0=Number(D0.getResponseHeader("Content-length")),c0,I0=(c0=D0.getResponseHeader("Accept-Ranges"))&&c0==="bytes",Z0=(c0=D0.getResponseHeader("Content-Encoding"))&&c0==="gzip",fx=1024*1024;I0||(fx=B0);var dx=(Rx,Tx)=>{Rx>Tx&&U("invalid range ("+Rx+", "+Tx+") or no bytes requested!"),Tx>B0-1&&U("only "+B0+" bytes available! programmer error!");var lx=new XMLHttpRequest;return lx.open("GET",o,!1),B0!==fx&&lx.setRequestHeader("Range","bytes="+Rx+"-"+Tx),lx.responseType="arraybuffer",lx.overrideMimeType&&lx.overrideMimeType("text/plain; charset=x-user-defined"),lx.send(null),lx.status>=200&&lx.status<300||lx.status===304||U("Couldn't load "+o+". Status: "+lx.status),lx.response!==void 0?new Uint8Array(lx.response||[]):EA(lx.responseText||"",!0)},qx=this;qx.setDataGetter(Rx=>{var Tx=Rx*fx,lx=(Rx+1)*fx-1;return lx=Math.min(lx,B0-1),typeof qx.chunks[Rx]>"u"&&(qx.chunks[Rx]=dx(Tx,lx)),typeof qx.chunks[Rx]>"u"&&U("doXHR failed!"),qx.chunks[Rx]}),(Z0||!B0)&&(fx=B0=1,B0=this.getter(0).length,fx=B0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=B0,this._chunkSize=fx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){B||U("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var m=new d,w={isDevice:!1,contents:m}}else var w={isDevice:!1,url:o};var I=i.createFile(F,n,w,v,E);w.contents?I.contents=w.contents:w.url&&(I.contents=null,I.url=w.url),Object.defineProperties(I,{usedBytes:{get:function(){return this.contents.length}}});var Q={};for(let[g0,D0]of Object.entries(I.stream_ops))Q[g0]=(...B0)=>(i.forceLoadFile(I),D0(...B0));function d0(g0,D0,B0,c0,I0){var Z0=g0.node.contents;if(I0>=Z0.length)return 0;var fx=Math.min(Z0.length-I0,c0);if(Z0.slice)for(var dx=0;dx<fx;dx++)D0[B0+dx]=Z0[I0+dx];else for(var dx=0;dx<fx;dx++)D0[B0+dx]=Z0.get(I0+dx);return fx}return Q.read=(g0,D0,B0,c0,I0)=>(i.forceLoadFile(I),d0(g0,D0,B0,c0,I0)),Q.mmap=(g0,D0,B0,c0,I0)=>{i.forceLoadFile(I);var Z0=BA(D0);if(!Z0)throw new i.ErrnoError(48);return d0(g0,sx,Z0,D0,B0),{ptr:Z0,allocated:!0}},I.stream_ops=Q,I}},h0={currentUmask:18,calculateAt(F,n,o){if(a0.isAbs(n))return n;var v;if(F===-100)v=i.cwd();else{var E=h0.getStreamFromFD(F);v=E.path}if(n.length==0){if(!o)throw new i.ErrnoError(44);return v}return v+"/"+n},writeStat(F,n){P0[F>>2]=n.dev,P0[F+4>>2]=n.mode,P0[F+8>>2]=n.nlink,P0[F+12>>2]=n.uid,P0[F+16>>2]=n.gid,P0[F+20>>2]=n.rdev,O0[F+24>>3]=BigInt(n.size),U0[F+32>>2]=4096,U0[F+36>>2]=n.blocks;var o=n.atime.getTime(),v=n.mtime.getTime(),E=n.ctime.getTime();return O0[F+40>>3]=BigInt(Math.floor(o/1e3)),P0[F+48>>2]=o%1e3*1e3*1e3,O0[F+56>>3]=BigInt(Math.floor(v/1e3)),P0[F+64>>2]=v%1e3*1e3*1e3,O0[F+72>>3]=BigInt(Math.floor(E/1e3)),P0[F+80>>2]=E%1e3*1e3*1e3,O0[F+88>>3]=BigInt(n.ino),0},writeStatFs(F,n){P0[F+4>>2]=n.bsize,P0[F+60>>2]=n.bsize,O0[F+8>>3]=BigInt(n.blocks),O0[F+16>>3]=BigInt(n.bfree),O0[F+24>>3]=BigInt(n.bavail),O0[F+32>>3]=BigInt(n.files),O0[F+40>>3]=BigInt(n.ffree),P0[F+48>>2]=n.fsid,P0[F+64>>2]=n.flags,P0[F+56>>2]=n.namelen},doMsync(F,n,o,v,E){if(!i.isFile(n.node.mode))throw new i.ErrnoError(43);if(v&2)return 0;var d=IA.slice(F,F+o);i.msync(n,d,E,o,v)},getStreamFromFD(F){var n=i.getStreamChecked(F);return n},varargs:void 0,getStr(F){var n=Fx(F);return n}};function br(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 0:{var E=Hx();if(E<0)return-28;for(;i.streams[E];)E++;var d;return d=i.dupStream(v,E),d.fd}case 1:case 2:return 0;case 3:return v.flags;case 4:{var E=Hx(),m=289792;return v.flags=v.flags&~m|E&m,0}case 12:{var E=Jx(),w=0;return Ux[E+w>>1]=2,0}case 13:case 14:return 0}return-28}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function hA(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 21509:return v.tty?0:-59;case 21505:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcgets){var E=v.tty.ops.ioctl_tcgets(v),d=Jx();U0[d>>2]=E.c_iflag||0,U0[d+4>>2]=E.c_oflag||0,U0[d+8>>2]=E.c_cflag||0,U0[d+12>>2]=E.c_lflag||0;for(var m=0;m<32;m++)sx[d+m+17]=E.c_cc[m]||0;return 0}return 0}case 21510:case 21511:case 21512:return v.tty?0:-59;case 21506:case 21507:case 21508:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcsets){for(var d=Jx(),w=U0[d>>2],I=U0[d+4>>2],Q=U0[d+8>>2],d0=U0[d+12>>2],g0=[],m=0;m<32;m++)g0.push(sx[d+m+17]);return v.tty.ops.ioctl_tcsets(v.tty,n,{c_iflag:w,c_oflag:I,c_cflag:Q,c_lflag:d0,c_cc:g0})}return 0}case 21519:{if(!v.tty)return-59;var d=Jx();return U0[d>>2]=0,0}case 21520:return v.tty?-28:-59;case 21537:case 21531:{var d=Jx();return i.ioctl(v,n,d)}case 21523:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tiocgwinsz){var D0=v.tty.ops.ioctl_tiocgwinsz(v.tty),d=Jx();Ux[d>>1]=D0[0],Ux[d+2>>1]=D0[1]}return 0}case 21524:return v.tty?0:-59;case 21515:return v.tty?0:-59;default:return-28}}catch(B0){if(typeof i>"u"||B0.name!=="ErrnoError")throw B0;return-B0.errno}}function dA(F,n,o,v){h0.varargs=v;try{n=h0.getStr(n),n=h0.calculateAt(F,n);var E=v?Hx():0;return o&64&&(E&=~h0.currentUmask),i.open(n,o,E).fd}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}var fe=()=>2147483648,tr=(F,n)=>Math.ceil(F/n)*n,Lr=F=>{var n=hr.buffer.byteLength,o=(F-n+65535)/65536|0;try{return hr.grow(o),n0(),1}catch{}},Rr=F=>{var n=IA.length;F>>>=0;var o=fe();if(F>o)return!1;for(var v=1;v<=4;v*=2){var E=n*(1+.2/v);E=Math.min(E,F+100663296);var d=Math.min(o,tr(Math.max(F,E),65536)),m=Lr(d);if(m)return!0}return!1};function le(F){try{var n=h0.getStreamFromFD(F);return i.close(n),0}catch(o){if(typeof i>"u"||o.name!=="ErrnoError")throw o;return o.errno}}var Ee=(F,n,o,v)=>{for(var E=0,d=0;d<o;d++){var m=P0[n>>2],w=P0[n+4>>2];n+=8;var I=i.read(F,sx,m,w,v);if(I<0)return-1;if(E+=I,I<w)break;typeof v<"u"&&(v+=I)}return E};function Be(F,n,o,v){try{var E=h0.getStreamFromFD(F),d=Ee(E,n,o);return P0[v>>2]=d,0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var nr=9007199254740992,Or=-9007199254740992,LA=F=>F<Or||F>nr?NaN:Number(F);function sr(F,n,o,v){n=LA(n);try{if(isNaN(n))return 22;var E=h0.getStreamFromFD(F);return i.llseek(E,n,o),O0[v>>3]=BigInt(E.position),E.getdents&&n===0&&o===0&&(E.getdents=null),0}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var ce=(F,n,o,v)=>{for(var E=0,d=0;d<o;d++){var m=P0[n>>2],w=P0[n+4>>2];n+=8;var I=i.write(F,sx,m,w,v);if(I<0)return-1;if(E+=I,I<w)break;typeof v<"u"&&(v+=I)}return E};function Gr(F,n,o,v){try{var E=h0.getStreamFromFD(F),d=ce(E,n,o);return P0[v>>2]=d,0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var Ur=F=>{var n=s["_"+F];return n},RA=(F,n)=>{sx.set(F,n)},ir=(F,n,o)=>Ar(F,IA,n,o),pr=F=>Cx(F),Hr=F=>{var n=lA(F)+1,o=pr(n);return ir(F,o,n),o},Jr=(F,n,o,v,E)=>{var d={string:c0=>{var I0=0;return c0!=null&&c0!==0&&(I0=Hr(c0)),I0},array:c0=>{var I0=pr(c0.length);return RA(c0,I0),I0}};function m(c0){return n==="string"?Fx(c0):n==="boolean"?!!c0:c0}var w=Ur(F),I=[],Q=0;if(v)for(var d0=0;d0<v.length;d0++){var g0=d[o[d0]];g0?(Q===0&&(Q=ZA()),I[d0]=g0(v[d0])):I[d0]=v[d0]}var D0=w(...I);function B0(c0){return Q!==0&&Mr(Q),m(c0)}return D0=B0(D0),D0},Kr=(F,n,o,v)=>{var E=!o||o.every(m=>m==="number"||m==="boolean"),d=n!=="string";return d&&E&&!v?Ur(F):(...m)=>Jr(F,n,o,m,v)},Ce=(...F)=>i.createPath(...F),de=(...F)=>i.unlink(...F),ar=(...F)=>i.createLazyFile(...F),De=(...F)=>i.createDevice(...F);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(Ir=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(p=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.addRunDependency=Sx,s.removeRunDependency=er,s.ccall=Jr,s.cwrap=Kr,s.setValue=nA,s.getValue=jA,s.UTF8ToString=Fx,s.stringToUTF8=ir,s.lengthBytesUTF8=lA,s.FS_preloadFile=iA,s.FS_unlink=de,s.FS_createPath=Ce,s.FS_createDevice=De,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=ar,s.PROXYFS=j0;function ue(){return typeof s.__prDispatch=="function"?1:0}function zr(F,n,o,v){return s.__prDispatch(F,n,o,v)|0}function Vr(F,n){return typeof s<"u"&&typeof s.__prDebugOut=="function"?(s.__prDebugOut(F,n),n):0}var OA,Wr,GA,jr,Mx,be,gA,UA,mr,mx,or,HA,f,c,b,h,_,$,J,Y,l0,k0,Q0,H0,R0,q0,vx,gx,Lx,Kx,zx,JA,Zx,aA,Cx,pe,Ft,vt,hr;function ft(F){OA=s._pr_set_limits=F.pr_set_limits,Wr=s._pr_set_budget=F.pr_set_budget,GA=s._pr_close=F.pr_close,jr=s._free=F.free,Mx=s._pr_reset_run_state=F.pr_reset_run_state,be=s._pr_open=F.pr_open,gA=s._pr_num_natives=F.pr_num_natives,UA=s._pr_native_name=F.pr_native_name,mr=s._pr_register_all=F.pr_register_all,mx=s._pr_num_publics=F.pr_num_publics,or=s._pr_public_name=F.pr_public_name,HA=s._pr_find_public=F.pr_find_public,f=s._pr_exec=F.pr_exec,c=s._pr_last_error=F.pr_last_error,b=s._pr_last_cip=F.pr_last_cip,h=s._pr_last_frm=F.pr_last_frm,_=s._pr_get_budget_used=F.pr_get_budget_used,$=s._pr_raise_error=F.pr_raise_error,J=s._pr_verify_addr=F.pr_verify_addr,Y=s._pr_addr=F.pr_addr,l0=s._pr_data_size=F.pr_data_size,k0=s._pr_heap_alloc=F.pr_heap_alloc,Q0=s._pr_read_cell=F.pr_read_cell,H0=s._pr_write_cell=F.pr_write_cell,R0=s._pr_read_cells=F.pr_read_cells,q0=s._pr_write_cells=F.pr_write_cells,vx=s._pr_read_packed=F.pr_read_packed,gx=s._pr_write_packed=F.pr_write_packed,Lx=s._pr_read_cstring=F.pr_read_cstring,Kx=s._malloc=F.malloc,zx=s._pr_get_virtual_us=F.pr_get_virtual_us,JA=s._pr_set_virtual_us=F.pr_set_virtual_us,Zx=s._pr_set_rand_seed=F.pr_set_rand_seed,aA=F._emscripten_stack_restore,Cx=F._emscripten_stack_alloc,pe=F.emscripten_stack_get_current,Ft=hr=F.memory,vt=F.__indirect_function_table}var Ge={__assert_fail:fA,__syscall_fcntl64:br,__syscall_ioctl:hA,__syscall_openat:dA,emscripten_resize_heap:Rr,fd_close:le,fd_read:Be,fd_seek:sr,fd_write:Gr,pr_debug_out:Vr,pr_js_dispatch:zr,pr_js_has_dispatch:ue};function Xr(){if(Ax>0){_0=Xr;return}if(e0(),Ax>0){_0=Xr;return}function F(){s.calledRun=!0,!v0&&(x0(),X?.(s),s.onRuntimeInitialized?.(),f0())}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),F()},1)):F()}var KA;return KA=await eA(),Xr(),V?a=s:a=new Promise((F,n)=>{X=F,H=n}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),Uo={};gB(Uo,{createPawnCC:()=>$B,createPawnDbg:()=>PB,createPawnRun:()=>NB});Ho.exports=kB(Uo);var SB=qs(yB(),1),qB=qs(_B(),1),TB=qs(wB(),1),$B=SB.default,PB=qB.default,NB=TB.default});var ne=Ta((Qj,Nv)=>{"use strict";var Rc=Object.create,Nt=Object.defineProperty,Oc=Object.getOwnPropertyDescriptor,HF=Object.getOwnPropertyNames,Gc=Object.getPrototypeOf,Uc=Object.prototype.hasOwnProperty,Hc=(x,A,r)=>A in x?Nt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:r}):x[A]=r,Jc=(x,A)=>function(){try{return A||(0,x[HF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(e){throw A=0,e}},Kc=(x,A)=>{for(var r in A)Nt(x,r,{get:A[r],enumerable:!0})},JF=(x,A,r,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of HF(A))!Uc.call(x,t)&&t!==r&&Nt(x,t,{get:()=>A[t],enumerable:!(e=Oc(A,t))||e.enumerable});return x},zc=(x,A,r)=>(r=x!=null?Rc(Gc(x)):{},JF(A||!x||!x.__esModule?Nt(r,"default",{value:x,enumerable:!0}):r,x)),Vc=x=>JF(Nt({},"__esModule",{value:!0}),x),s0=(x,A,r)=>Hc(x,typeof A!="symbol"?A+"":A,r),Wc=Jc({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a;(function(){function C(i0){i0=i0.split("-")[0];for(var u0=i0.split(".").slice(0,3);u0.length<3;)u0.push("00");return u0=u0.map((w0,ax,tx)=>w0.padStart(2,"0")),u0.join("")}var u=i0=>[i0/1e4|0,(i0/100|0)%100,i0%100].join("."),y=2147483647,R=typeof process<"u"&&process.versions?.node?C(process.versions.node):y;if(R<180300)throw new Error(`This emscripten-generated code requires node v${u(180300)} (detected v${u(R)})`);var G=typeof navigator<"u"&&navigator.userAgent;if(G){var r0=G.includes("Safari/")&&!G.includes("Chrome/")&&G.match(/Version\/(\d+\.?\d*\.?\d*)/)?C(G.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):y;if(r0<15e4)throw new Error(`This emscripten-generated code requires Safari v${u(15e4)} (detected v${r0})`);var A0=G.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):y;if(A0<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${A0})`);var t0=G.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):y;if(t0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${t0})`)}})();var s=t,l=!!globalThis.window,B=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",p=!l&&!D&&!B,j=[],g="./this.program",q=(C,u)=>{throw u};typeof __filename<"u"?e=__filename:B&&(e=self.location.href);var S="",P,T;if(D){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var M=require("fs");S=__dirname+"/",T=u=>{u=O(u)?new URL(u):u;var y=M.readFileSync(u);return k(Buffer.isBuffer(y)),y},P=async(u,y=!0)=>{u=O(u)?new URL(u):u;var R=M.readFileSync(u,y?void 0:"utf8");return k(y?Buffer.isBuffer(R):typeof R=="string"),R},process.argv.length>1&&(g=process.argv[1].replace(/\\/g,"/")),j=process.argv.slice(2),q=(u,y)=>{throw process.exitCode=u,y}}else if(!p)if(l||B){try{S=new URL(".",e).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");B&&(T=C=>{var u=new XMLHttpRequest;return u.open("GET",C,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),P=async C=>{if(O(C))return new Promise((y,R)=>{var G=new XMLHttpRequest;G.open("GET",C,!0),G.responseType="arraybuffer",G.onload=()=>{if(G.status==200||G.status==0&&G.response){y(G.response);return}R(G.status)},G.onerror=R,G.send(null)});var u=await fetch(C,{credentials:"same-origin"});if(u.ok)return u.arrayBuffer();throw new Error(u.status+" : "+u.url)}}else throw new Error("environment detection error");var N=console.log.bind(console),z=console.error.bind(console);k(!p,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var v0;globalThis.WebAssembly||z("no native wasm support detected");var L=!1;function k(C,u){C||U0("Assertion failed"+(u?": "+u:""))}var O=C=>C.startsWith("file://");function W(){var C=Fs();k((C&3)==0),C==0&&(C+=4),$0[C>>2]=34821223,$0[C+4>>2]=2310721022,$0[0]=1668509029}function X(){if(!L){var C=Fs();C==0&&(C+=4);var u=$0[C>>2],y=$0[C+4>>2];(u!=34821223||y!=2310721022)&&U0(`Stack overflow! Stack cookie has been overwritten at ${ix(C)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ix(y)} ${ix(u)}`),$0[0]!=1668509029&&U0("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class V extends H{}var n0=!0;(()=>{var C=new Int16Array(1),u=new Int8Array(C.buffer);C[0]=25459,(u[0]!==115||u[1]!==99)&&U0("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function e0(C){Object.getOwnPropertyDescriptor(s,C)||Object.defineProperty(s,C,{configurable:!0,set(){U0(`Attempt to set \`Module.${C}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(C){return()=>k(!1,`call to '${C}' via reference taken before Wasm module initialization`)}function f0(C){Object.getOwnPropertyDescriptor(s,C)&&U0(`\`Module.${C}\` was supplied but \`${C}\` not included in INCOMING_MODULE_JS_API`)}function U(C){return C==="FS_createPath"||C==="FS_createDataFile"||C==="FS_createPreloadedFile"||C==="FS_preloadFile"||C==="FS_unlink"||C==="addRunDependency"||C==="FS_createLazyFile"||C==="FS_createDevice"||C==="removeRunDependency"}function F0(C){E0(C)}function E0(C){Object.getOwnPropertyDescriptor(s,C)||Object.defineProperty(s,C,{configurable:!0,get(){var u=`'${C}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(C)&&(u+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),U0(u)}})}function b0(C){for(var u=0,y=C.length,R=new Uint8Array(y),G;u<y;++u)G=C.charCodeAt(u),R[u]=~G>>8&G;return R}var p0,N0,L0=!1;function cx(){var C=Kt.buffer;nA=new Int8Array(C),pA=new Int16Array(C),s.HEAPU8=Fx=new Uint8Array(C),ox=new Uint16Array(C),jA=new Int32Array(C),$0=new Uint32Array(C),Mr=new Float32Array(C),ZA=new Float64Array(C),Ir=new BigInt64Array(C),wx=new BigUint64Array(C)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function eA(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)oe(s.preRun.shift());e0("preRun"),fA(a0)}function NA(){k(!L0),L0=!0,X(),Ue.__wasm_call_ctors()}function Ux(){if(X(),s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Jx(s.postRun.shift());e0("postRun"),fA(Hx)}function U0(C){s.onAbort?.(C),C=`Aborted(${C})`,z(C),L=!0;var u=new WebAssembly.RuntimeError(C);throw N0?.(u),u}function O0(){U0("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var sx={init:O0,createDataFile:O0,createPreloadedFile:O0,createLazyFile:O0,open:O0,mkdev:O0,registerDevice:O0,analyzePath:O0,ErrnoError:O0};function V0(C,u){return(...y)=>{k(L0,`native function \`${C}\` called before runtime initialization`);var R=Ue[C];return k(R,`exported native function \`${C}\` not found`),k(y.length<=u,`native function \`${C}\` called with ${y.length} args but expects ${u}`),R(...y)}}var J0;function Y0(){return b0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1961
|
+
\x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\xC1\xC6\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xFB\xC6\0\v\f\0A\x87\xC7\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\xB5\xC7\0\v\0A\xC1\xC7\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xEF\xC7\0\v\0A\xFB\xC7\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\xB2\xC8\0\v\0\0\0\0\0\0\0\0\0 \0A\xE3\xC8\0\v\0A\xEF\xC8\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\x9D\xC9\0\v\0A\xA9\xC9\0\v'\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0A\xD2\xC9\0\v\0\0\0\0p\x99\0\x91\xF4E%,g\0\0@i`)}function p0(F){return F}async function b0(F){return F}async function N0(F,n){try{var o=await b0(F),v=await WebAssembly.instantiate(o,n);return v}catch(B){N(`failed to asynchronously prepare wasm: ${B}`),U(B)}}async function L0(F,n,o){return N0(n,o)}function cx(){var F={env:Ge,wasi_snapshot_preview1:Ge};return F}async function eA(){function F(d,m){return JA=d.exports,ft(JA),n0(),JA}function n(d){return F(d.instance)}var o=cx();if(s.instantiateWasm)return new Promise((d,m)=>{s.instantiateWasm(o,(w,I)=>{d(F(w,I))})});F0??(F0=E0());var v=await L0(z,F0,o),B=n(v);return B}class NA{constructor(n){xx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${n})`,this.status=n}}var Ux,U0,O0,sx,V0,K0,Y0,P0,ie,IA,Nr=F=>{for(;F.length>0;)F.shift()(s)},C0=[],ae=F=>C0.push(F),tA=[],bA=F=>tA.push(F);function jA(F,n="i8"){switch(n.endsWith("*")&&(n="*"),n){case"i1":return sx[F];case"i8":return sx[F];case"i16":return Ux[F>>1];case"i32":return U0[F>>2];case"i64":return O0[F>>3];case"float":return V0[F>>2];case"double":return K0[F>>3];case"*":return P0[F>>2];default:U(`invalid type for getValue: ${n}`)}}var Ir=!0;function nA(F,n,o="i8"){switch(o.endsWith("*")&&(o="*"),o){case"i1":sx[F]=n;break;case"i8":sx[F]=n;break;case"i16":Ux[F>>1]=n;break;case"i32":U0[F>>2]=n;break;case"i64":O0[F>>3]=BigInt(n);break;case"float":V0[F>>2]=n;break;case"double":K0[F>>3]=n;break;case"*":P0[F>>2]=n;break;default:U(`invalid type for setValue: ${o}`)}}var Mr=F=>aA(F),ZA=()=>be(),ox=globalThis.TextDecoder&&new TextDecoder,$0=(F,n,o,v)=>{var B=n+o;if(v)return B;for(;F[n]&&!(n>=B);)++n;return n},wx=(F,n=0,o,v)=>{var B=$0(F,n,o,v);if(B-n>16&&F.buffer&&ox)return ox.decode(F.subarray(n,B));for(var d="";n<B;){var m=F[n++];if(!(m&128)){d+=String.fromCharCode(m);continue}var w=F[n++]&63;if((m&224)==192){d+=String.fromCharCode((m&31)<<6|w);continue}var I=F[n++]&63;if((m&240)==224?m=(m&15)<<12|w<<6|I:m=(m&7)<<18|w<<12|I<<6|F[n++]&63,m<65536)d+=String.fromCharCode(m);else{var Q=m-65536;d+=String.fromCharCode(55296|Q>>10,56320|Q&1023)}}return d},Fx=(F,n,o)=>F?wx(IA,F,n,o):"",fA=(F,n,o,v)=>U(`Assertion failed: ${Fx(F)}, at: `+[n?Fx(n):"unknown filename",o,v?Fx(v):"unknown function"]),Hx=()=>{var F=U0[+h0.varargs>>2];return h0.varargs+=4,F},Kx=Hx,a0={isAbs:F=>F.charAt(0)==="/",splitPath:F=>{var n=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return n.exec(F).slice(1)},normalizeArray:(F,n)=>{for(var o=0,v=F.length-1;v>=0;v--){var B=F[v];B==="."?F.splice(v,1):B===".."?(F.splice(v,1),o++):o&&(F.splice(v,1),o--)}if(n)for(;o;o--)F.unshift("..");return F},normalize:F=>{var n=a0.isAbs(F),o=F.slice(-1)==="/";return F=a0.normalizeArray(F.split("/").filter(v=>!!v),!n).join("/"),!F&&!n&&(F="."),F&&o&&(F+="/"),(n?"/":"")+F},dirname:F=>{var n=a0.splitPath(F),o=n[0],v=n[1];return!o&&!v?".":(v&&(v=v.slice(0,-1)),o+v)},basename:F=>F&&F.match(/([^\/]+|\/)\/*$/)[1],join:(...F)=>a0.normalize(F.join("/")),join2:(F,n)=>a0.normalize(F+"/"+n)},oe=()=>{if(D){var F=require("crypto");return n=>F.randomFillSync(n)}return n=>(crypto.getRandomValues(n),0)},xr=F=>(xr=oe())(F),ix={resolve:(...F)=>{for(var n="",o=!1,v=F.length-1;v>=-1&&!o;v--){var B=v>=0?F[v]:i.cwd();if(typeof B!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!B)return"";n=B+"/"+n,o=a0.isAbs(B)}return n=a0.normalizeArray(n.split("/").filter(d=>!!d),!o).join("/"),(o?"/":"")+n||"."},relative:(F,n)=>{F=ix.resolve(F).slice(1),n=ix.resolve(n).slice(1);function o(Q){for(var d0=0;d0<Q.length&&Q[d0]==="";d0++);for(var g0=Q.length-1;g0>=0&&Q[g0]==="";g0--);return d0>g0?[]:Q.slice(d0,g0-d0+1)}for(var v=o(F.split("/")),B=o(n.split("/")),d=Math.min(v.length,B.length),m=d,w=0;w<d;w++)if(v[w]!==B[w]){m=w;break}for(var I=[],w=m;w<v.length;w++)I.push("..");return I=I.concat(B.slice(m)),I.join("/")}},Ix=[],lA=F=>{for(var n=0,o=0;o<F.length;++o){var v=F.charCodeAt(o);v<=127?n++:v<=2047?n+=2:v>=55296&&v<=57343?(n+=4,++o):n+=3}return n},Ar=(F,n,o,v)=>{if(!(v>0))return 0;for(var B=o,d=o+v-1,m=0;m<F.length;++m){var w=F.codePointAt(m);if(w<=127){if(o>=d)break;n[o++]=w}else if(w<=2047){if(o+1>=d)break;n[o++]=192|w>>6,n[o++]=128|w&63}else if(w<=65535){if(o+2>=d)break;n[o++]=224|w>>12,n[o++]=128|w>>6&63,n[o++]=128|w&63}else{if(o+3>=d)break;n[o++]=240|w>>18,n[o++]=128|w>>12&63,n[o++]=128|w>>6&63,n[o++]=128|w&63,m++}}return n[o]=0,o-B},EA=(F,n,o)=>{var v=o>0?o:lA(F)+1,B=new Array(v),d=Ar(F,B,0,B.length);return n&&(B.length=d),B},Fe=()=>{if(!Ix.length){var F=null;if(D){var n=256,o=Buffer.alloc(n),v=0,B=process.stdin.fd;try{v=T.readSync(B,o,0,n)}catch(d){if(d.toString().includes("EOF"))v=0;else throw d}v>0&&(F=o.slice(0,v).toString("utf-8"))}else globalThis.window?.prompt&&(F=window.prompt("Input: "),F!==null&&(F+=`
|
|
1962
|
+
`));if(!F)return null;Ix=EA(F,!0)}return Ix.shift()},z0={ttys:[],init(){},shutdown(){},register(F,n){z0.ttys[F]={input:[],output:[],ops:n},i.registerDevice(F,z0.stream_ops)},stream_ops:{open(F){var n=z0.ttys[F.node.rdev];if(!n)throw new i.ErrnoError(43);F.tty=n,F.seekable=!1},close(F){F.tty.ops.fsync(F.tty)},fsync(F){F.tty.ops.fsync(F.tty)},read(F,n,o,v,B){if(!F.tty||!F.tty.ops.get_char)throw new i.ErrnoError(60);for(var d=0,m=0;m<v;m++){var w;try{w=F.tty.ops.get_char(F.tty)}catch{throw new i.ErrnoError(29)}if(w===void 0&&d===0)throw new i.ErrnoError(6);if(w==null)break;d++,n[o+m]=w}return d&&(F.node.atime=Date.now()),d},write(F,n,o,v,B){if(!F.tty||!F.tty.ops.put_char)throw new i.ErrnoError(60);try{for(var d=0;d<v;d++)F.tty.ops.put_char(F.tty,n[o+d])}catch{throw new i.ErrnoError(29)}return v&&(F.node.mtime=F.node.ctime=Date.now()),d}},default_tty_ops:{get_char(F){return Fe()},put_char(F,n){n===null||n===10?(M(wx(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(M(wx(F.output)),F.output=[])},ioctl_tcgets(F){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(F,n,o){return 0},ioctl_tiocgwinsz(F){return[24,80]}},default_tty1_ops:{put_char(F,n){n===null||n===10?(N(wx(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(N(wx(F.output)),F.output=[])}}},BA=F=>{U()},J={ops_table:null,mount(F){return J.createNode(null,"/",16895,0)},createNode(F,n,o,v){if(i.isBlkdev(o)||i.isFIFO(o))throw new i.ErrnoError(63);J.ops_table||(J.ops_table={dir:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,lookup:J.node_ops.lookup,mknod:J.node_ops.mknod,rename:J.node_ops.rename,unlink:J.node_ops.unlink,rmdir:J.node_ops.rmdir,readdir:J.node_ops.readdir,symlink:J.node_ops.symlink},stream:{llseek:J.stream_ops.llseek}},file:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:{llseek:J.stream_ops.llseek,read:J.stream_ops.read,write:J.stream_ops.write,mmap:J.stream_ops.mmap,msync:J.stream_ops.msync}},link:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr,readlink:J.node_ops.readlink},stream:{}},chrdev:{node:{getattr:J.node_ops.getattr,setattr:J.node_ops.setattr},stream:i.chrdev_stream_ops}});var B=i.createNode(F,n,o,v);return i.isDir(B.mode)?(B.node_ops=J.ops_table.dir.node,B.stream_ops=J.ops_table.dir.stream,B.contents={}):i.isFile(B.mode)?(B.node_ops=J.ops_table.file.node,B.stream_ops=J.ops_table.file.stream,B.usedBytes=0,B.contents=J.emptyFileContents??(J.emptyFileContents=new Uint8Array(0))):i.isLink(B.mode)?(B.node_ops=J.ops_table.link.node,B.stream_ops=J.ops_table.link.stream):i.isChrdev(B.mode)&&(B.node_ops=J.ops_table.chrdev.node,B.stream_ops=J.ops_table.chrdev.stream),B.atime=B.mtime=B.ctime=Date.now(),F&&(F.contents[n]=B,F.atime=F.mtime=F.ctime=B.atime),B},getFileDataAsTypedArray(F){return F.contents.subarray(0,F.usedBytes)},expandFileStorage(F,n){var o=F.contents.length;if(!(o>=n)){var v=1024*1024;n=Math.max(n,o*(o<v?2:1.125)>>>0),o&&(n=Math.max(n,256));var B=J.getFileDataAsTypedArray(F);F.contents=new Uint8Array(n),F.contents.set(B)}},resizeFileStorage(F,n){if(F.usedBytes!=n){var o=F.contents;F.contents=new Uint8Array(n),F.contents.set(o.subarray(0,Math.min(n,F.usedBytes))),F.usedBytes=n}},node_ops:{getattr(F){var n={};return n.dev=i.isChrdev(F.mode)?F.id:1,n.ino=F.id,n.mode=F.mode,n.nlink=1,n.uid=0,n.gid=0,n.rdev=F.rdev,i.isDir(F.mode)?n.size=4096:i.isFile(F.mode)?n.size=F.usedBytes:i.isLink(F.mode)?n.size=F.link.length:n.size=0,n.atime=new Date(F.atime),n.mtime=new Date(F.mtime),n.ctime=new Date(F.ctime),n.blksize=4096,n.blocks=Math.ceil(n.size/n.blksize),n},setattr(F,n){for(let o of["mode","atime","mtime","ctime"])n[o]!=null&&(F[o]=n[o]);n.size!==void 0&&J.resizeFileStorage(F,n.size)},lookup(F,n){throw J.doesNotExistError||(J.doesNotExistError=new i.ErrnoError(44),J.doesNotExistError.stack="<generic error, no stack>"),J.doesNotExistError},mknod(F,n,o,v){return J.createNode(F,n,o,v)},rename(F,n,o){var v;try{v=i.lookupNode(n,o)}catch{}if(v){if(i.isDir(F.mode))for(var B in v.contents)throw new i.ErrnoError(55);i.hashRemoveNode(v)}delete F.parent.contents[F.name],n.contents[o]=F,F.name=o,n.ctime=n.mtime=F.parent.ctime=F.parent.mtime=Date.now()},unlink(F,n){delete F.contents[n],F.ctime=F.mtime=Date.now()},rmdir(F,n){var o=i.lookupNode(F,n);for(var v in o.contents)throw new i.ErrnoError(55);delete F.contents[n],F.ctime=F.mtime=Date.now()},readdir(F){return[".","..",...Object.keys(F.contents)]},symlink(F,n,o){var v=J.createNode(F,n,41471,0);return v.link=o,v},readlink(F){if(!i.isLink(F.mode))throw new i.ErrnoError(28);return F.link}},stream_ops:{read(F,n,o,v,B){var d=F.node.contents;if(B>=F.node.usedBytes)return 0;var m=Math.min(F.node.usedBytes-B,v);return n.set(d.subarray(B,B+m),o),m},write(F,n,o,v,B,d){if(n.buffer===sx.buffer&&(d=!1),!v)return 0;var m=F.node;return m.mtime=m.ctime=Date.now(),d?(m.contents=n.subarray(o,o+v),m.usedBytes=v):m.usedBytes===0&&B===0?(m.contents=n.slice(o,o+v),m.usedBytes=v):(J.expandFileStorage(m,B+v),m.contents.set(n.subarray(o,o+v),B),m.usedBytes=Math.max(m.usedBytes,B+v)),v},llseek(F,n,o){var v=n;if(o===1?v+=F.position:o===2&&i.isFile(F.node.mode)&&(v+=F.node.usedBytes),v<0)throw new i.ErrnoError(28);return v},mmap(F,n,o,v,B){if(!i.isFile(F.node.mode))throw new i.ErrnoError(43);var d,m,w=F.node.contents;if(!(B&2)&&w.buffer===sx.buffer)m=!1,d=w.byteOffset;else{if(m=!0,d=BA(n),!d)throw new i.ErrnoError(48);w&&((o>0||o+n<w.length)&&(w.subarray?w=w.subarray(o,o+n):w=Array.prototype.slice.call(w,o,o+n)),sx.set(w,d))}return{ptr:d,allocated:m}},msync(F,n,o,v,B){return J.stream_ops.write(F,n,0,v,o,!1),0}}},mA=F=>{if(typeof F!="string")return F;var n={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},o=n[F];if(typeof o>"u")throw new Error(`Unknown file open mode: ${F}`);return o},Yx=F=>(typeof F=="string"&&(F=EA(F,!0)),F.subarray||(F=new Uint8Array(F)),F),Qx=(F,n)=>{var o=0;return F&&(o|=365),n&&(o|=146),o},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},j0={mount(F){return j0.createNode(null,"/",F.opts.fs.lstat(F.opts.root).mode,0)},createNode(F,n,o,v){if(!i.isDir(o)&&!i.isFile(o)&&!i.isLink(o))throw new i.ErrnoError(y0.EINVAL);var B=i.createNode(F,n,o);return B.node_ops=j0.node_ops,B.stream_ops=j0.stream_ops,B},realPath(F){for(var n=[];F.parent!==F;)n.push(F.name),F=F.parent;return n.push(F.mount.opts.root),n.reverse(),a0.join(...n)},node_ops:{getattr(F){var n=j0.realPath(F),o;try{o=F.mount.opts.fs.lstat(n)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}return{dev:o.dev,ino:o.ino,mode:o.mode,nlink:o.nlink,uid:o.uid,gid:o.gid,rdev:o.rdev,size:o.size,atime:o.atime,mtime:o.mtime,ctime:o.ctime,blksize:o.blksize,blocks:o.blocks}},setattr(F,n){var o=j0.realPath(F);try{if(n.mode!==void 0&&(F.mount.opts.fs.chmod(o,n.mode),F.mode=n.mode),n.atime||n.mtime){var v=new Date(n.atime||n.mtime),B=new Date(n.mtime||n.atime);F.mount.opts.fs.utime(o,v,B)}n.size!==void 0&&F.mount.opts.fs.truncate(o,n.size)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},lookup(F,n){try{var o=a0.join2(j0.realPath(F),n),v=F.mount.opts.fs.lstat(o).mode,B=j0.createNode(F,n,v);return B}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},mknod(F,n,o,v){var B=j0.createNode(F,n,o,v),d=j0.realPath(B);try{i.isDir(B.mode)?B.mount.opts.fs.mkdir(d,B.mode):B.mount.opts.fs.writeFile(d,"",{mode:B.mode})}catch(m){throw m.code?new i.ErrnoError(y0[m.code]):m}return B},rename(F,n,o){var v=j0.realPath(F),B=a0.join2(j0.realPath(n),o);try{F.mount.opts.fs.rename(v,B),F.name=o}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},unlink(F,n){var o=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.unlink(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},rmdir(F,n){var o=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.rmdir(o)}catch(v){throw v.code?new i.ErrnoError(y0[v.code]):v}},readdir(F){var n=j0.realPath(F);try{return F.mount.opts.fs.readdir(n)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},symlink(F,n,o){var v=a0.join2(j0.realPath(F),n);try{F.mount.opts.fs.symlink(o,v)}catch(B){throw B.code?new i.ErrnoError(y0[B.code]):B}},readlink(F){var n=j0.realPath(F);try{return F.mount.opts.fs.readlink(n)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}}},stream_ops:{open(F){var n=j0.realPath(F.node);try{F.nfd=F.node.mount.opts.fs.open(n,F.flags)}catch(o){throw o.code?new i.ErrnoError(y0[o.code]):o}},close(F){try{F.node.mount.opts.fs.close(F.nfd)}catch(n){throw n.code?new i.ErrnoError(y0[n.code]):n}},read(F,n,o,v,B){try{return F.node.mount.opts.fs.read(F.nfd,n,o,v,B)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},write(F,n,o,v,B){try{return F.node.mount.opts.fs.write(F.nfd,n,o,v,B)}catch(d){throw d.code?new i.ErrnoError(y0[d.code]):d}},llseek(F,n,o){var v=n;if(o===1)v+=F.position;else if(o===2&&i.isFile(F.node.mode))try{var B=F.node.node_ops.getattr(F.node);v+=B.size}catch(d){throw new i.ErrnoError(y0[d.code])}if(v<0)throw new i.ErrnoError(y0.EINVAL);return v}}},cA=async F=>{var n=await S(F);return new Uint8Array(n)},rr=(...F)=>i.createDataFile(...F),jx=F=>F,Ax=0,_0=null,er=F=>{if(Ax--,s.monitorRunDependencies?.(Ax),Ax==0&&_0){var n=_0;_0=null,n()}},Sx=F=>{Ax++,s.monitorRunDependencies?.(Ax)},MA=[],CA=async(F,n)=>{typeof Browser<"u"&&Browser.init();for(var o of MA)if(o.canHandle(n))return o.handle(F,n);return F},iA=async(F,n,o,v,B,d,m,w)=>{var I=n?ix.resolve(a0.join2(F,n)):F,Q=jx(`cp ${I}`);Sx(Q);try{var d0=o;typeof o=="string"&&(d0=await cA(o)),d0=await CA(d0,I),w?.(),d||rr(F,n,d0,v,B,m)}finally{er(Q)}},ve=(F,n,o,v,B,d,m,w,I,Q)=>{iA(F,n,o,v,B,w,I,Q).then(d).catch(m)},i={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(F){xx(this,"name","ErrnoError"),this.errno=F}},FSStream:class{constructor(){xx(this,"shared",{})}get object(){return this.node}set object(F){this.node=F}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(F){this.shared.flags=F}get position(){return this.shared.position}set position(F){this.shared.position=F}},FSNode:class{constructor(F,n,o,v){xx(this,"node_ops",{}),xx(this,"stream_ops",{}),xx(this,"readMode",365),xx(this,"writeMode",146),xx(this,"mounted",null),F||(F=this),this.parent=F,this.mount=F.mount,this.id=i.nextInode++,this.name=n,this.mode=o,this.rdev=v,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(F){F?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(F){F?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return i.isDir(this.mode)}get isDevice(){return i.isChrdev(this.mode)}},lookupPath(F,n={}){if(!F)throw new i.ErrnoError(44);n.follow_mount??(n.follow_mount=!0),a0.isAbs(F)||(F=i.cwd()+"/"+F);x:for(var o=0;o<40;o++){for(var v=F.split("/").filter(Q=>!!Q),B=i.root,d="/",m=0;m<v.length;m++){var w=m===v.length-1;if(w&&n.parent)break;if(v[m]!=="."){if(v[m]===".."){if(d=a0.dirname(d),i.isRoot(B)){F=d+"/"+v.slice(m+1).join("/"),o--;continue x}else B=B.parent;continue}d=a0.join2(d,v[m]);try{B=i.lookupNode(B,v[m])}catch(Q){if(Q?.errno===44&&w&&n.noent_okay)return{path:d};throw Q}if(i.isMountpoint(B)&&(!w||n.follow_mount)&&(B=B.mounted.root),i.isLink(B.mode)&&(!w||n.follow)){if(!B.node_ops.readlink)throw new i.ErrnoError(52);var I=B.node_ops.readlink(B);a0.isAbs(I)||(I=a0.dirname(d)+"/"+I),F=I+"/"+v.slice(m+1).join("/");continue x}}}return{path:d,node:B}}throw new i.ErrnoError(32)},getPath(F){for(var n;;){if(i.isRoot(F)){var o=F.mount.mountpoint;return n?o[o.length-1]!=="/"?`${o}/${n}`:o+n:o}n=n?`${F.name}/${n}`:F.name,F=F.parent}},hashName(F,n){for(var o=0,v=0;v<n.length;v++)o=(o<<5)-o+n.charCodeAt(v)|0;return(F+o>>>0)%i.nameTable.length},hashAddNode(F){var n=i.hashName(F.parent.id,F.name);F.name_next=i.nameTable[n],i.nameTable[n]=F},hashRemoveNode(F){var n=i.hashName(F.parent.id,F.name);if(i.nameTable[n]===F)i.nameTable[n]=F.name_next;else for(var o=i.nameTable[n];o;){if(o.name_next===F){o.name_next=F.name_next;break}o=o.name_next}},lookupNode(F,n){var o=i.mayLookup(F);if(o)throw new i.ErrnoError(o);for(var v=i.hashName(F.id,n),B=i.nameTable[v];B;B=B.name_next){var d=B.name;if(B.parent.id===F.id&&d===n)return B}return i.lookup(F,n)},createNode(F,n,o,v){var B=new i.FSNode(F,n,o,v);return i.hashAddNode(B),B},destroyNode(F){i.hashRemoveNode(F)},isRoot(F){return F===F.parent},isMountpoint(F){return!!F.mounted},isFile(F){return(F&61440)===32768},isDir(F){return(F&61440)===16384},isLink(F){return(F&61440)===40960},isChrdev(F){return(F&61440)===8192},isBlkdev(F){return(F&61440)===24576},isFIFO(F){return(F&61440)===4096},isSocket(F){return(F&49152)===49152},flagsToPermissionString(F){var n=["r","w","rw"][F&3];return F&512&&(n+="w"),n},nodePermissions(F,n){return i.ignorePermissions?0:n.includes("r")&&!(F.mode&292)||n.includes("w")&&!(F.mode&146)||n.includes("x")&&!(F.mode&73)?2:0},mayLookup(F){if(!i.isDir(F.mode))return 54;var n=i.nodePermissions(F,"x");return n||(F.node_ops.lookup?0:2)},mayCreate(F,n){if(!i.isDir(F.mode))return 54;try{var o=i.lookupNode(F,n);return 20}catch{}return i.nodePermissions(F,"wx")},mayDelete(F,n,o){var v;try{v=i.lookupNode(F,n)}catch(d){return d.errno}var B=i.nodePermissions(F,"wx");if(B)return B;if(o){if(!i.isDir(v.mode))return 54;if(i.isRoot(v)||i.getPath(v)===i.cwd())return 10}else if(i.isDir(v.mode))return 31;return 0},mayOpen(F,n){if(!F)return 44;if(i.isLink(F.mode))return 32;var o=i.flagsToPermissionString(n);return i.isDir(F.mode)&&(o!=="r"||n&576)?31:i.nodePermissions(F,o)},checkOpExists(F,n){if(!F)throw new i.ErrnoError(n);return F},MAX_OPEN_FDS:4096,nextfd(){for(var F=0;F<=i.MAX_OPEN_FDS;F++)if(!i.streams[F])return F;throw new i.ErrnoError(33)},getStreamChecked(F){var n=i.getStream(F);if(!n)throw new i.ErrnoError(8);return n},getStream:F=>i.streams[F],createStream(F,n=-1){return F=Object.assign(new i.FSStream,F),n==-1&&(n=i.nextfd()),F.fd=n,i.streams[n]=F,F},closeStream(F){i.streams[F]=null},dupStream(F,n=-1){var o=i.createStream(F,n);return o.stream_ops?.dup?.(o),o},doSetAttr(F,n,o){var v=F?.stream_ops.setattr,B=v?F:n;v??(v=n.node_ops.setattr),i.checkOpExists(v,63);try{v(B,o)}catch(d){throw d instanceof RangeError?new i.ErrnoError(22):d}},chrdev_stream_ops:{open(F){var n=i.getDevice(F.node.rdev);F.stream_ops=n.stream_ops,F.stream_ops.open?.(F)},llseek(){throw new i.ErrnoError(70)}},major:F=>F>>8,minor:F=>F&255,makedev:(F,n)=>F<<8|n,registerDevice(F,n){i.devices[F]={stream_ops:n}},getDevice:F=>i.devices[F],getMounts(F){for(var n=[],o=[F];o.length;){var v=o.pop();n.push(v),o.push(...v.mounts)}return n},syncfs(F,n){typeof F=="function"&&(n=F,F=!1),i.syncFSRequests++,i.syncFSRequests>1&&N(`warning: ${i.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var o=i.getMounts(i.root.mount),v=0;function B(w){return i.syncFSRequests--,n(w)}function d(w){if(w)return d.errored?void 0:(d.errored=!0,B(w));++v>=o.length&&B(null)}for(var m of o)m.type.syncfs?m.type.syncfs(m,F,d):d(null)},mount(F,n,o){var v=o==="/",B=!o,d;if(v&&i.root)throw new i.ErrnoError(10);if(!v&&!B){var m=i.lookupPath(o,{follow_mount:!1});if(o=m.path,d=m.node,i.isMountpoint(d))throw new i.ErrnoError(10);if(!i.isDir(d.mode))throw new i.ErrnoError(54)}var w={type:F,opts:n,mountpoint:o,mounts:[]},I=F.mount(w);return I.mount=w,w.root=I,v?i.root=I:d&&(d.mounted=w,d.mount&&d.mount.mounts.push(w)),I},unmount(F){var n=i.lookupPath(F,{follow_mount:!1});if(!i.isMountpoint(n.node))throw new i.ErrnoError(28);var o=n.node,v=o.mounted,B=i.getMounts(v);for(var[d,m]of Object.entries(i.nameTable))for(;m;){var w=m.name_next;B.includes(m.mount)&&i.destroyNode(m),m=w}o.mounted=null;var I=o.mount.mounts.indexOf(v);o.mount.mounts.splice(I,1)},lookup(F,n){return F.node_ops.lookup(F,n)},mknod(F,n,o){var v=i.lookupPath(F,{parent:!0}),B=v.node,d=a0.basename(F);if(!d)throw new i.ErrnoError(28);if(d==="."||d==="..")throw new i.ErrnoError(20);var m=i.mayCreate(B,d);if(m)throw new i.ErrnoError(m);if(!B.node_ops.mknod)throw new i.ErrnoError(63);return B.node_ops.mknod(B,d,n,o)},statfs(F){return i.statfsNode(i.lookupPath(F,{follow:!0}).node)},statfsStream(F){return i.statfsNode(F.node)},statfsNode(F){var n={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:i.nextInode,ffree:i.nextInode-1,fsid:42,flags:2,namelen:255};return F.node_ops.statfs&&Object.assign(n,F.node_ops.statfs(F.mount.opts.root)),n},create(F,n=438){return n&=4095,n|=32768,i.mknod(F,n,0)},mkdir(F,n=511){return n&=1023,n|=16384,i.mknod(F,n,0)},mkdirTree(F,n){var o=F.split("/"),v="";for(var B of o)if(B){(v||a0.isAbs(F))&&(v+="/"),v+=B;try{i.mkdir(v,n)}catch(d){if(d.errno!=20)throw d}}},mkdev(F,n,o){return typeof o>"u"&&(o=n,n=438),n|=8192,i.mknod(F,n,o)},symlink(F,n){if(!ix.resolve(F))throw new i.ErrnoError(44);var o=i.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new i.ErrnoError(44);var B=a0.basename(n),d=i.mayCreate(v,B);if(d)throw new i.ErrnoError(d);if(!v.node_ops.symlink)throw new i.ErrnoError(63);return v.node_ops.symlink(v,B,F)},rename(F,n){var o=a0.dirname(F),v=a0.dirname(n),B=a0.basename(F),d=a0.basename(n),m,w,I;if(m=i.lookupPath(F,{parent:!0}),w=m.node,m=i.lookupPath(n,{parent:!0}),I=m.node,!w||!I)throw new i.ErrnoError(44);if(w.mount!==I.mount)throw new i.ErrnoError(75);var Q=i.lookupNode(w,B),d0=ix.relative(F,v);if(d0.charAt(0)!==".")throw new i.ErrnoError(28);if(d0=ix.relative(n,o),d0.charAt(0)!==".")throw new i.ErrnoError(55);var g0;try{g0=i.lookupNode(I,d)}catch{}if(Q!==g0){var D0=i.isDir(Q.mode),B0=i.mayDelete(w,B,D0);if(B0)throw new i.ErrnoError(B0);if(B0=g0?i.mayDelete(I,d,D0):i.mayCreate(I,d),B0)throw new i.ErrnoError(B0);if(!w.node_ops.rename)throw new i.ErrnoError(63);if(i.isMountpoint(Q)||g0&&i.isMountpoint(g0))throw new i.ErrnoError(10);if(I!==w&&(B0=i.nodePermissions(w,"w"),B0))throw new i.ErrnoError(B0);i.hashRemoveNode(Q);try{w.node_ops.rename(Q,I,d),Q.parent=I}catch(c0){throw c0}finally{i.hashAddNode(Q)}}},rmdir(F){var n=i.lookupPath(F,{parent:!0}),o=n.node,v=a0.basename(F),B=i.lookupNode(o,v),d=i.mayDelete(o,v,!0);if(d)throw new i.ErrnoError(d);if(!o.node_ops.rmdir)throw new i.ErrnoError(63);if(i.isMountpoint(B))throw new i.ErrnoError(10);o.node_ops.rmdir(o,v),i.destroyNode(B)},readdir(F){var n=i.lookupPath(F,{follow:!0}),o=n.node,v=i.checkOpExists(o.node_ops.readdir,54);return v(o)},unlink(F){var n=i.lookupPath(F,{parent:!0}),o=n.node;if(!o)throw new i.ErrnoError(44);var v=a0.basename(F),B=i.lookupNode(o,v),d=i.mayDelete(o,v,!1);if(d)throw new i.ErrnoError(d);if(!o.node_ops.unlink)throw new i.ErrnoError(63);if(i.isMountpoint(B))throw new i.ErrnoError(10);o.node_ops.unlink(o,v),i.destroyNode(B)},readlink(F){var n=i.lookupPath(F),o=n.node;if(!o)throw new i.ErrnoError(44);if(!o.node_ops.readlink)throw new i.ErrnoError(28);return o.node_ops.readlink(o)},stat(F,n){var o=i.lookupPath(F,{follow:!n}),v=o.node,B=i.checkOpExists(v.node_ops.getattr,63);return B(v)},fstat(F){var n=i.getStreamChecked(F),o=n.node,v=n.stream_ops.getattr,B=v?n:o;return v??(v=o.node_ops.getattr),i.checkOpExists(v,63),v(B)},lstat(F){return i.stat(F,!0)},doChmod(F,n,o,v){i.doSetAttr(F,n,{mode:o&4095|n.mode&-4096,ctime:Date.now(),dontFollow:v})},chmod(F,n,o){var v;if(typeof F=="string"){var B=i.lookupPath(F,{follow:!o});v=B.node}else v=F;i.doChmod(null,v,n,o)},lchmod(F,n){i.chmod(F,n,!0)},fchmod(F,n){var o=i.getStreamChecked(F);i.doChmod(o,o.node,n,!1)},doChown(F,n,o){i.doSetAttr(F,n,{timestamp:Date.now(),dontFollow:o})},chown(F,n,o,v){var B;if(typeof F=="string"){var d=i.lookupPath(F,{follow:!v});B=d.node}else B=F;i.doChown(null,B,v)},lchown(F,n,o){i.chown(F,n,o,!0)},fchown(F,n,o){var v=i.getStreamChecked(F);i.doChown(v,v.node,!1)},doTruncate(F,n,o){if(i.isDir(n.mode))throw new i.ErrnoError(31);if(!i.isFile(n.mode))throw new i.ErrnoError(28);var v=i.nodePermissions(n,"w");if(v)throw new i.ErrnoError(v);i.doSetAttr(F,n,{size:o,timestamp:Date.now()})},truncate(F,n){if(n<0)throw new i.ErrnoError(28);var o;if(typeof F=="string"){var v=i.lookupPath(F,{follow:!0});o=v.node}else o=F;i.doTruncate(null,o,n)},ftruncate(F,n){var o=i.getStreamChecked(F);if(n<0||(o.flags&2097155)===0)throw new i.ErrnoError(28);i.doTruncate(o,o.node,n)},utime(F,n,o){var v=i.lookupPath(F,{follow:!0}),B=v.node,d=i.checkOpExists(B.node_ops.setattr,63);d(B,{atime:n,mtime:o})},open(F,n,o=438){if(F==="")throw new i.ErrnoError(44);n=mA(n),n&64?o=o&4095|32768:o=0;var v,B;if(typeof F=="object")v=F;else{B=F.endsWith("/");var d=i.lookupPath(F,{follow:!(n&131072),noent_okay:!0});v=d.node,F=d.path}var m=!1;if(n&64)if(v){if(n&128)throw new i.ErrnoError(20)}else{if(B)throw new i.ErrnoError(31);v=i.mknod(F,o|511,0),m=!0}if(!v)throw new i.ErrnoError(44);if(i.isChrdev(v.mode)&&(n&=-513),n&65536&&!i.isDir(v.mode))throw new i.ErrnoError(54);if(!m){var w=i.mayOpen(v,n);if(w)throw new i.ErrnoError(w)}n&512&&!m&&i.truncate(v,0),n&=-131713;var I=i.createStream({node:v,path:i.getPath(v),flags:n,seekable:!0,position:0,stream_ops:v.stream_ops,ungotten:[],error:!1});return I.stream_ops.open&&I.stream_ops.open(I),m&&i.chmod(v,o&511),I},close(F){if(i.isClosed(F))throw new i.ErrnoError(8);F.getdents&&(F.getdents=null);try{F.stream_ops.close&&F.stream_ops.close(F)}catch(n){throw n}finally{i.closeStream(F.fd)}F.fd=null},isClosed(F){return F.fd===null},llseek(F,n,o){if(i.isClosed(F))throw new i.ErrnoError(8);if(!F.seekable||!F.stream_ops.llseek)throw new i.ErrnoError(70);if(o!=0&&o!=1&&o!=2)throw new i.ErrnoError(28);return F.position=F.stream_ops.llseek(F,n,o),F.ungotten=[],F.position},read(F,n,o,v,B){if(v<0||B<0)throw new i.ErrnoError(28);if(i.isClosed(F))throw new i.ErrnoError(8);if((F.flags&2097155)===1)throw new i.ErrnoError(8);if(i.isDir(F.node.mode))throw new i.ErrnoError(31);if(!F.stream_ops.read)throw new i.ErrnoError(28);var d=typeof B<"u";if(!d)B=F.position;else if(!F.seekable)throw new i.ErrnoError(70);var m=F.stream_ops.read(F,n,o,v,B);return d||(F.position+=m),m},write(F,n,o,v,B,d){if(v<0||B<0)throw new i.ErrnoError(28);if(i.isClosed(F))throw new i.ErrnoError(8);if((F.flags&2097155)===0)throw new i.ErrnoError(8);if(i.isDir(F.node.mode))throw new i.ErrnoError(31);if(!F.stream_ops.write)throw new i.ErrnoError(28);F.seekable&&F.flags&1024&&i.llseek(F,0,2);var m=typeof B<"u";if(!m)B=F.position;else if(!F.seekable)throw new i.ErrnoError(70);var w=F.stream_ops.write(F,n,o,v,B,d);return m||(F.position+=w),w},mmap(F,n,o,v,B){if((v&2)!==0&&(B&2)===0&&(F.flags&2097155)!==2)throw new i.ErrnoError(2);if((F.flags&2097155)===1)throw new i.ErrnoError(2);if(!F.stream_ops.mmap)throw new i.ErrnoError(43);if(!n)throw new i.ErrnoError(28);return F.stream_ops.mmap(F,n,o,v,B)},msync(F,n,o,v,B){return F.stream_ops.msync?F.stream_ops.msync(F,n,o,v,B):0},ioctl(F,n,o){if(!F.stream_ops.ioctl)throw new i.ErrnoError(59);return F.stream_ops.ioctl(F,n,o)},readFile(F,n={}){n.flags=n.flags||0,n.encoding=n.encoding||"binary",n.encoding!=="utf8"&&n.encoding!=="binary"&&U(`Invalid encoding type "${n.encoding}"`);var o=i.open(F,n.flags),v=i.stat(F),B=v.size,d=new Uint8Array(B);return i.read(o,d,0,B,0),n.encoding==="utf8"&&(d=wx(d)),i.close(o),d},writeFile(F,n,o={}){o.flags=o.flags||577;var v=i.open(F,o.flags,o.mode);n=Yx(n),i.write(v,n,0,n.byteLength,void 0,o.canOwn),i.close(v)},cwd:()=>i.currentPath,chdir(F){var n=i.lookupPath(F,{follow:!0});if(n.node===null)throw new i.ErrnoError(44);if(!i.isDir(n.node.mode))throw new i.ErrnoError(54);var o=i.nodePermissions(n.node,"x");if(o)throw new i.ErrnoError(o);i.currentPath=n.path},createDefaultDirectories(){i.mkdir("/tmp"),i.mkdir("/home"),i.mkdir("/home/web_user")},createDefaultDevices(){i.mkdir("/dev"),i.registerDevice(i.makedev(1,3),{read:()=>0,write:(v,B,d,m,w)=>m,llseek:()=>0}),i.mkdev("/dev/null",i.makedev(1,3)),z0.register(i.makedev(5,0),z0.default_tty_ops),z0.register(i.makedev(6,0),z0.default_tty1_ops),i.mkdev("/dev/tty",i.makedev(5,0)),i.mkdev("/dev/tty1",i.makedev(6,0));var F=new Uint8Array(1024),n=0,o=()=>(n===0&&(xr(F),n=F.byteLength),F[--n]);i.createDevice("/dev","random",o),i.createDevice("/dev","urandom",o),i.mkdir("/dev/shm"),i.mkdir("/dev/shm/tmp")},createSpecialDirectories(){i.mkdir("/proc");var F=i.mkdir("/proc/self");i.mkdir("/proc/self/fd"),i.mount({mount(){var n=i.createNode(F,"fd",16895,73);return n.stream_ops={llseek:J.stream_ops.llseek},n.node_ops={lookup(o,v){var B=+v,d=i.getStreamChecked(B),m={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>d.path},id:B+1};return m.parent=m,m},readdir(){return Array.from(i.streams.entries()).filter(([o,v])=>v).map(([o,v])=>o.toString())}},n}},{},"/proc/self/fd")},createStandardStreams(F,n,o){F?i.createDevice("/dev","stdin",F):i.symlink("/dev/tty","/dev/stdin"),n?i.createDevice("/dev","stdout",null,n):i.symlink("/dev/tty","/dev/stdout"),o?i.createDevice("/dev","stderr",null,o):i.symlink("/dev/tty1","/dev/stderr");var v=i.open("/dev/stdin",0),B=i.open("/dev/stdout",1),d=i.open("/dev/stderr",1)},staticInit(){i.nameTable=new Array(4096),i.mount(J,{},"/"),i.createDefaultDirectories(),i.createDefaultDevices(),i.createSpecialDirectories(),i.filesystems={MEMFS:J,PROXYFS:j0}},init(F,n,o){i.initialized=!0,F??(F=s.stdin),n??(n=s.stdout),o??(o=s.stderr),i.createStandardStreams(F,n,o)},quit(){i.initialized=!1;for(var F of i.streams)F&&i.close(F)},findObject(F,n){var o=i.analyzePath(F,n);return o.exists?o.object:null},analyzePath(F,n){try{var o=i.lookupPath(F,{follow:!n});F=o.path}catch{}var v={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var o=i.lookupPath(F,{parent:!0});v.parentExists=!0,v.parentPath=o.path,v.parentObject=o.node,v.name=a0.basename(F),o=i.lookupPath(F,{follow:!n}),v.exists=!0,v.path=o.path,v.object=o.node,v.name=o.node.name,v.isRoot=o.path==="/"}catch(B){v.error=B.errno}return v},createPath(F,n,o,v){F=typeof F=="string"?F:i.getPath(F);for(var B=n.split("/").reverse();B.length;){var d=B.pop();if(d){var m=a0.join2(F,d);try{i.mkdir(m)}catch(w){if(w.errno!=20)throw w}F=m}}return m},createFile(F,n,o,v,B){var d=a0.join2(typeof F=="string"?F:i.getPath(F),n),m=Qx(v,B);return i.create(d,m)},createDataFile(F,n,o,v,B,d){var m=n;F&&(F=typeof F=="string"?F:i.getPath(F),m=n?a0.join2(F,n):F);var w=Qx(v,B),I=i.create(m,w);if(o){o=Yx(o),i.chmod(I,w|146);var Q=i.open(I,577);i.write(Q,o,0,o.length,0,d),i.close(Q),i.chmod(I,w)}},createDevice(F,n,o,v){var B,d=a0.join2(typeof F=="string"?F:i.getPath(F),n),m=Qx(!!o,!!v);(B=i.createDevice).major??(B.major=64);var w=i.makedev(i.createDevice.major++,0);return i.registerDevice(w,{open(I){I.seekable=!1},close(I){v?.buffer?.length&&v(10)},read(I,Q,d0,g0,D0){for(var B0=0,c0=0;c0<g0;c0++){var I0;try{I0=o()}catch{throw new i.ErrnoError(29)}if(I0===void 0&&B0===0)throw new i.ErrnoError(6);if(I0==null)break;B0++,Q[d0+c0]=I0}return B0&&(I.node.atime=Date.now()),B0},write(I,Q,d0,g0,D0){for(var B0=0;B0<g0;B0++)try{v(Q[d0+B0])}catch{throw new i.ErrnoError(29)}return g0&&(I.node.mtime=I.node.ctime=Date.now()),B0}}),i.mkdev(d,m,w)},forceLoadFile(F){if(F.isDevice||F.isFolder||F.link||F.contents)return!0;if(globalThis.XMLHttpRequest)U("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{F.contents=P(F.url)}catch{throw new i.ErrnoError(29)}},createLazyFile(F,n,o,v,B){class d{constructor(){xx(this,"lengthKnown",!1),xx(this,"chunks",[])}get(D0){if(!(D0>this.length-1||D0<0)){var B0=D0%this.chunkSize,c0=D0/this.chunkSize|0;return this.getter(c0)[B0]}}setDataGetter(D0){this.getter=D0}cacheLength(){var D0=new XMLHttpRequest;D0.open("HEAD",o,!1),D0.send(null),D0.status>=200&&D0.status<300||D0.status===304||U("Couldn't load "+o+". Status: "+D0.status);var B0=Number(D0.getResponseHeader("Content-length")),c0,I0=(c0=D0.getResponseHeader("Accept-Ranges"))&&c0==="bytes",Z0=(c0=D0.getResponseHeader("Content-Encoding"))&&c0==="gzip",fx=1024*1024;I0||(fx=B0);var dx=(Rx,Tx)=>{Rx>Tx&&U("invalid range ("+Rx+", "+Tx+") or no bytes requested!"),Tx>B0-1&&U("only "+B0+" bytes available! programmer error!");var lx=new XMLHttpRequest;return lx.open("GET",o,!1),B0!==fx&&lx.setRequestHeader("Range","bytes="+Rx+"-"+Tx),lx.responseType="arraybuffer",lx.overrideMimeType&&lx.overrideMimeType("text/plain; charset=x-user-defined"),lx.send(null),lx.status>=200&&lx.status<300||lx.status===304||U("Couldn't load "+o+". Status: "+lx.status),lx.response!==void 0?new Uint8Array(lx.response||[]):EA(lx.responseText||"",!0)},qx=this;qx.setDataGetter(Rx=>{var Tx=Rx*fx,lx=(Rx+1)*fx-1;return lx=Math.min(lx,B0-1),typeof qx.chunks[Rx]>"u"&&(qx.chunks[Rx]=dx(Tx,lx)),typeof qx.chunks[Rx]>"u"&&U("doXHR failed!"),qx.chunks[Rx]}),(Z0||!B0)&&(fx=B0=1,B0=this.getter(0).length,fx=B0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=B0,this._chunkSize=fx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){E||U("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var m=new d,w={isDevice:!1,contents:m}}else var w={isDevice:!1,url:o};var I=i.createFile(F,n,w,v,B);w.contents?I.contents=w.contents:w.url&&(I.contents=null,I.url=w.url),Object.defineProperties(I,{usedBytes:{get:function(){return this.contents.length}}});var Q={};for(let[g0,D0]of Object.entries(I.stream_ops))Q[g0]=(...B0)=>(i.forceLoadFile(I),D0(...B0));function d0(g0,D0,B0,c0,I0){var Z0=g0.node.contents;if(I0>=Z0.length)return 0;var fx=Math.min(Z0.length-I0,c0);if(Z0.slice)for(var dx=0;dx<fx;dx++)D0[B0+dx]=Z0[I0+dx];else for(var dx=0;dx<fx;dx++)D0[B0+dx]=Z0.get(I0+dx);return fx}return Q.read=(g0,D0,B0,c0,I0)=>(i.forceLoadFile(I),d0(g0,D0,B0,c0,I0)),Q.mmap=(g0,D0,B0,c0,I0)=>{i.forceLoadFile(I);var Z0=BA(D0);if(!Z0)throw new i.ErrnoError(48);return d0(g0,sx,Z0,D0,B0),{ptr:Z0,allocated:!0}},I.stream_ops=Q,I}},h0={currentUmask:18,calculateAt(F,n,o){if(a0.isAbs(n))return n;var v;if(F===-100)v=i.cwd();else{var B=h0.getStreamFromFD(F);v=B.path}if(n.length==0){if(!o)throw new i.ErrnoError(44);return v}return v+"/"+n},writeStat(F,n){P0[F>>2]=n.dev,P0[F+4>>2]=n.mode,P0[F+8>>2]=n.nlink,P0[F+12>>2]=n.uid,P0[F+16>>2]=n.gid,P0[F+20>>2]=n.rdev,O0[F+24>>3]=BigInt(n.size),U0[F+32>>2]=4096,U0[F+36>>2]=n.blocks;var o=n.atime.getTime(),v=n.mtime.getTime(),B=n.ctime.getTime();return O0[F+40>>3]=BigInt(Math.floor(o/1e3)),P0[F+48>>2]=o%1e3*1e3*1e3,O0[F+56>>3]=BigInt(Math.floor(v/1e3)),P0[F+64>>2]=v%1e3*1e3*1e3,O0[F+72>>3]=BigInt(Math.floor(B/1e3)),P0[F+80>>2]=B%1e3*1e3*1e3,O0[F+88>>3]=BigInt(n.ino),0},writeStatFs(F,n){P0[F+4>>2]=n.bsize,P0[F+60>>2]=n.bsize,O0[F+8>>3]=BigInt(n.blocks),O0[F+16>>3]=BigInt(n.bfree),O0[F+24>>3]=BigInt(n.bavail),O0[F+32>>3]=BigInt(n.files),O0[F+40>>3]=BigInt(n.ffree),P0[F+48>>2]=n.fsid,P0[F+64>>2]=n.flags,P0[F+56>>2]=n.namelen},doMsync(F,n,o,v,B){if(!i.isFile(n.node.mode))throw new i.ErrnoError(43);if(v&2)return 0;var d=IA.slice(F,F+o);i.msync(n,d,B,o,v)},getStreamFromFD(F){var n=i.getStreamChecked(F);return n},varargs:void 0,getStr(F){var n=Fx(F);return n}};function pr(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 0:{var B=Hx();if(B<0)return-28;for(;i.streams[B];)B++;var d;return d=i.dupStream(v,B),d.fd}case 1:case 2:return 0;case 3:return v.flags;case 4:{var B=Hx(),m=289792;return v.flags=v.flags&~m|B&m,0}case 12:{var B=Kx(),w=0;return Ux[B+w>>1]=2,0}case 13:case 14:return 0}return-28}catch(I){if(typeof i>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function hA(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 21509:return v.tty?0:-59;case 21505:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcgets){var B=v.tty.ops.ioctl_tcgets(v),d=Kx();U0[d>>2]=B.c_iflag||0,U0[d+4>>2]=B.c_oflag||0,U0[d+8>>2]=B.c_cflag||0,U0[d+12>>2]=B.c_lflag||0;for(var m=0;m<32;m++)sx[d+m+17]=B.c_cc[m]||0;return 0}return 0}case 21510:case 21511:case 21512:return v.tty?0:-59;case 21506:case 21507:case 21508:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcsets){for(var d=Kx(),w=U0[d>>2],I=U0[d+4>>2],Q=U0[d+8>>2],d0=U0[d+12>>2],g0=[],m=0;m<32;m++)g0.push(sx[d+m+17]);return v.tty.ops.ioctl_tcsets(v.tty,n,{c_iflag:w,c_oflag:I,c_cflag:Q,c_lflag:d0,c_cc:g0})}return 0}case 21519:{if(!v.tty)return-59;var d=Kx();return U0[d>>2]=0,0}case 21520:return v.tty?-28:-59;case 21537:case 21531:{var d=Kx();return i.ioctl(v,n,d)}case 21523:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tiocgwinsz){var D0=v.tty.ops.ioctl_tiocgwinsz(v.tty),d=Kx();Ux[d>>1]=D0[0],Ux[d+2>>1]=D0[1]}return 0}case 21524:return v.tty?0:-59;case 21515:return v.tty?0:-59;default:return-28}}catch(B0){if(typeof i>"u"||B0.name!=="ErrnoError")throw B0;return-B0.errno}}function dA(F,n,o,v){h0.varargs=v;try{n=h0.getStr(n),n=h0.calculateAt(F,n);var B=v?Hx():0;return o&64&&(B&=~h0.currentUmask),i.open(n,o,B).fd}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}var fe=()=>2147483648,tr=(F,n)=>Math.ceil(F/n)*n,Lr=F=>{var n=hr.buffer.byteLength,o=(F-n+65535)/65536|0;try{return hr.grow(o),n0(),1}catch{}},Rr=F=>{var n=IA.length;F>>>=0;var o=fe();if(F>o)return!1;for(var v=1;v<=4;v*=2){var B=n*(1+.2/v);B=Math.min(B,F+100663296);var d=Math.min(o,tr(Math.max(F,B),65536)),m=Lr(d);if(m)return!0}return!1};function le(F){try{var n=h0.getStreamFromFD(F);return i.close(n),0}catch(o){if(typeof i>"u"||o.name!=="ErrnoError")throw o;return o.errno}}var Ee=(F,n,o,v)=>{for(var B=0,d=0;d<o;d++){var m=P0[n>>2],w=P0[n+4>>2];n+=8;var I=i.read(F,sx,m,w,v);if(I<0)return-1;if(B+=I,I<w)break;typeof v<"u"&&(v+=I)}return B};function Be(F,n,o,v){try{var B=h0.getStreamFromFD(F),d=Ee(B,n,o);return P0[v>>2]=d,0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var nr=9007199254740992,Or=-9007199254740992,LA=F=>F<Or||F>nr?NaN:Number(F);function sr(F,n,o,v){n=LA(n);try{if(isNaN(n))return 22;var B=h0.getStreamFromFD(F);return i.llseek(B,n,o),O0[v>>3]=BigInt(B.position),B.getdents&&n===0&&o===0&&(B.getdents=null),0}catch(d){if(typeof i>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var ce=(F,n,o,v)=>{for(var B=0,d=0;d<o;d++){var m=P0[n>>2],w=P0[n+4>>2];n+=8;var I=i.write(F,sx,m,w,v);if(I<0)return-1;if(B+=I,I<w)break;typeof v<"u"&&(v+=I)}return B};function Gr(F,n,o,v){try{var B=h0.getStreamFromFD(F),d=ce(B,n,o);return P0[v>>2]=d,0}catch(m){if(typeof i>"u"||m.name!=="ErrnoError")throw m;return m.errno}}var Ur=F=>{var n=s["_"+F];return n},RA=(F,n)=>{sx.set(F,n)},ir=(F,n,o)=>Ar(F,IA,n,o),br=F=>Cx(F),Hr=F=>{var n=lA(F)+1,o=br(n);return ir(F,o,n),o},Kr=(F,n,o,v,B)=>{var d={string:c0=>{var I0=0;return c0!=null&&c0!==0&&(I0=Hr(c0)),I0},array:c0=>{var I0=br(c0.length);return RA(c0,I0),I0}};function m(c0){return n==="string"?Fx(c0):n==="boolean"?!!c0:c0}var w=Ur(F),I=[],Q=0;if(v)for(var d0=0;d0<v.length;d0++){var g0=d[o[d0]];g0?(Q===0&&(Q=ZA()),I[d0]=g0(v[d0])):I[d0]=v[d0]}var D0=w(...I);function B0(c0){return Q!==0&&Mr(Q),m(c0)}return D0=B0(D0),D0},Jr=(F,n,o,v)=>{var B=!o||o.every(m=>m==="number"||m==="boolean"),d=n!=="string";return d&&B&&!v?Ur(F):(...m)=>Kr(F,n,o,m,v)},Ce=(...F)=>i.createPath(...F),de=(...F)=>i.unlink(...F),ar=(...F)=>i.createLazyFile(...F),De=(...F)=>i.createDevice(...F);if(i.createPreloadedFile=ve,i.preloadFile=iA,i.staticInit(),s.noExitRuntime&&(Ir=s.noExitRuntime),s.preloadPlugins&&(MA=s.preloadPlugins),s.print&&(M=s.print),s.printErr&&(N=s.printErr),s.wasmBinary&&(z=s.wasmBinary),s.arguments&&(b=s.arguments),s.thisProgram&&(j=s.thisProgram),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();s.addRunDependency=Sx,s.removeRunDependency=er,s.ccall=Kr,s.cwrap=Jr,s.setValue=nA,s.getValue=jA,s.UTF8ToString=Fx,s.stringToUTF8=ir,s.lengthBytesUTF8=lA,s.FS_preloadFile=iA,s.FS_unlink=de,s.FS_createPath=Ce,s.FS_createDevice=De,s.FS=i,s.FS_createDataFile=rr,s.FS_createLazyFile=ar,s.PROXYFS=j0;function ue(){return typeof s.__prDispatch=="function"?1:0}function zr(F,n,o,v){return s.__prDispatch(F,n,o,v)|0}function Vr(F,n){return typeof s<"u"&&typeof s.__prDebugOut=="function"?(s.__prDebugOut(F,n),n):0}var OA,Wr,GA,jr,Mx,pe,gA,UA,mr,mx,or,HA,f,c,p,h,_,$,K,Y,l0,k0,Q0,H0,R0,q0,vx,gx,Lx,Jx,zx,KA,Zx,aA,Cx,be,Ft,vt,hr;function ft(F){OA=s._pr_set_limits=F.pr_set_limits,Wr=s._pr_set_budget=F.pr_set_budget,GA=s._pr_close=F.pr_close,jr=s._free=F.free,Mx=s._pr_reset_run_state=F.pr_reset_run_state,pe=s._pr_open=F.pr_open,gA=s._pr_num_natives=F.pr_num_natives,UA=s._pr_native_name=F.pr_native_name,mr=s._pr_register_all=F.pr_register_all,mx=s._pr_num_publics=F.pr_num_publics,or=s._pr_public_name=F.pr_public_name,HA=s._pr_find_public=F.pr_find_public,f=s._pr_exec=F.pr_exec,c=s._pr_last_error=F.pr_last_error,p=s._pr_last_cip=F.pr_last_cip,h=s._pr_last_frm=F.pr_last_frm,_=s._pr_get_budget_used=F.pr_get_budget_used,$=s._pr_raise_error=F.pr_raise_error,K=s._pr_verify_addr=F.pr_verify_addr,Y=s._pr_addr=F.pr_addr,l0=s._pr_data_size=F.pr_data_size,k0=s._pr_heap_alloc=F.pr_heap_alloc,Q0=s._pr_read_cell=F.pr_read_cell,H0=s._pr_write_cell=F.pr_write_cell,R0=s._pr_read_cells=F.pr_read_cells,q0=s._pr_write_cells=F.pr_write_cells,vx=s._pr_read_packed=F.pr_read_packed,gx=s._pr_write_packed=F.pr_write_packed,Lx=s._pr_read_cstring=F.pr_read_cstring,Jx=s._malloc=F.malloc,zx=s._pr_get_virtual_us=F.pr_get_virtual_us,KA=s._pr_set_virtual_us=F.pr_set_virtual_us,Zx=s._pr_set_rand_seed=F.pr_set_rand_seed,aA=F._emscripten_stack_restore,Cx=F._emscripten_stack_alloc,be=F.emscripten_stack_get_current,Ft=hr=F.memory,vt=F.__indirect_function_table}var Ge={__assert_fail:fA,__syscall_fcntl64:pr,__syscall_ioctl:hA,__syscall_openat:dA,emscripten_resize_heap:Rr,fd_close:le,fd_read:Be,fd_seek:sr,fd_write:Gr,pr_debug_out:Vr,pr_js_dispatch:zr,pr_js_has_dispatch:ue};function Xr(){if(Ax>0){_0=Xr;return}if(e0(),Ax>0){_0=Xr;return}function F(){s.calledRun=!0,!v0&&(x0(),X?.(s),s.onRuntimeInitialized?.(),f0())}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),F()},1)):F()}var JA;return JA=await eA(),Xr(),W?a=s:a=new Promise((F,n)=>{X=F,H=n}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),Qo={};WB(Qo,{createPawnCC:()=>ec,createPawnDbg:()=>tc,createPawnRun:()=>nc});Zo.exports=XB(Qo);var xc=$s(YB(),1),Ac=$s(QB(),1),rc=$s(ZB(),1),ec=xc.default,tc=Ac.default,nc=rc.default});var ne=Pa((gm,Kv)=>{"use strict";var oC=Object.create,It=Object.defineProperty,FC=Object.getOwnPropertyDescriptor,ZF=Object.getOwnPropertyNames,vC=Object.getPrototypeOf,fC=Object.prototype.hasOwnProperty,lC=(x,A,r)=>A in x?It(x,A,{enumerable:!0,configurable:!0,writable:!0,value:r}):x[A]=r,EC=(x,A)=>function(){try{return A||(0,x[ZF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(e){throw A=0,e}},BC=(x,A)=>{for(var r in A)It(x,r,{get:A[r],enumerable:!0})},x8=(x,A,r,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of ZF(A))!fC.call(x,t)&&t!==r&&It(x,t,{get:()=>A[t],enumerable:!(e=FC(A,t))||e.enumerable});return x},cC=(x,A,r)=>(r=x!=null?oC(vC(x)):{},x8(A||!x||!x.__esModule?It(r,"default",{value:x,enumerable:!0}):r,x)),CC=x=>x8(It({},"__esModule",{value:!0}),x),s0=(x,A,r)=>lC(x,typeof A!="symbol"?A+"":A,r),dC=EC({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var r=(()=>{var e=globalThis.document?.currentScript?.src;return async function(t={}){var a;(function(){function C(i0){i0=i0.split("-")[0];for(var u0=i0.split(".").slice(0,3);u0.length<3;)u0.push("00");return u0=u0.map((w0,ax,tx)=>w0.padStart(2,"0")),u0.join("")}var u=i0=>[i0/1e4|0,(i0/100|0)%100,i0%100].join("."),y=2147483647,L=typeof process<"u"&&process.versions?.node?C(process.versions.node):y;if(L<180300)throw new Error(`This emscripten-generated code requires node v${u(180300)} (detected v${u(L)})`);var G=typeof navigator<"u"&&navigator.userAgent;if(G){var r0=G.includes("Safari/")&&!G.includes("Chrome/")&&G.match(/Version\/(\d+\.?\d*\.?\d*)/)?C(G.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):y;if(r0<15e4)throw new Error(`This emscripten-generated code requires Safari v${u(15e4)} (detected v${r0})`);var A0=G.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):y;if(A0<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${A0})`);var t0=G.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):y;if(t0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${t0})`)}})();var s=t,l=!!globalThis.window,E=!!globalThis.WorkerGlobalScope,D=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=!l&&!D&&!E,j=[],g="./this.program",q=(C,u)=>{throw u};typeof __filename<"u"?e=__filename:E&&(e=self.location.href);var S="",P,T;if(D){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var M=require("fs");S=__dirname+"/",T=u=>{u=O(u)?new URL(u):u;var y=M.readFileSync(u);return k(Buffer.isBuffer(y)),y},P=async(u,y=!0)=>{u=O(u)?new URL(u):u;var L=M.readFileSync(u,y?void 0:"utf8");return k(y?Buffer.isBuffer(L):typeof L=="string"),L},process.argv.length>1&&(g=process.argv[1].replace(/\\/g,"/")),j=process.argv.slice(2),q=(u,y)=>{throw process.exitCode=u,y}}else if(!b)if(l||E){try{S=new URL(".",e).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");E&&(T=C=>{var u=new XMLHttpRequest;return u.open("GET",C,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),P=async C=>{if(O(C))return new Promise((y,L)=>{var G=new XMLHttpRequest;G.open("GET",C,!0),G.responseType="arraybuffer",G.onload=()=>{if(G.status==200||G.status==0&&G.response){y(G.response);return}L(G.status)},G.onerror=L,G.send(null)});var u=await fetch(C,{credentials:"same-origin"});if(u.ok)return u.arrayBuffer();throw new Error(u.status+" : "+u.url)}}else throw new Error("environment detection error");var N=console.log.bind(console),z=console.error.bind(console);k(!b,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var v0;globalThis.WebAssembly||z("no native wasm support detected");var R=!1;function k(C,u){C||U0("Assertion failed"+(u?": "+u:""))}var O=C=>C.startsWith("file://");function V(){var C=fs();k((C&3)==0),C==0&&(C+=4),$0[C>>2]=34821223,$0[C+4>>2]=2310721022,$0[0]=1668509029}function X(){if(!R){var C=fs();C==0&&(C+=4);var u=$0[C>>2],y=$0[C+4>>2];(u!=34821223||y!=2310721022)&&U0(`Stack overflow! Stack cookie has been overwritten at ${ix(C)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ix(y)} ${ix(u)}`),$0[0]!=1668509029&&U0("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class W extends H{}var n0=!0;(()=>{var C=new Int16Array(1),u=new Int8Array(C.buffer);C[0]=25459,(u[0]!==115||u[1]!==99)&&U0("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function e0(C){Object.getOwnPropertyDescriptor(s,C)||Object.defineProperty(s,C,{configurable:!0,set(){U0(`Attempt to set \`Module.${C}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(C){return()=>k(!1,`call to '${C}' via reference taken before Wasm module initialization`)}function f0(C){Object.getOwnPropertyDescriptor(s,C)&&U0(`\`Module.${C}\` was supplied but \`${C}\` not included in INCOMING_MODULE_JS_API`)}function U(C){return C==="FS_createPath"||C==="FS_createDataFile"||C==="FS_createPreloadedFile"||C==="FS_preloadFile"||C==="FS_unlink"||C==="addRunDependency"||C==="FS_createLazyFile"||C==="FS_createDevice"||C==="removeRunDependency"}function F0(C){E0(C)}function E0(C){Object.getOwnPropertyDescriptor(s,C)||Object.defineProperty(s,C,{configurable:!0,get(){var u=`'${C}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(C)&&(u+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),U0(u)}})}function p0(C){for(var u=0,y=C.length,L=new Uint8Array(y),G;u<y;++u)G=C.charCodeAt(u),L[u]=~G>>8&G;return L}var b0,N0,L0=!1;function cx(){var C=zt.buffer;nA=new Int8Array(C),bA=new Int16Array(C),s.HEAPU8=Fx=new Uint8Array(C),ox=new Uint16Array(C),jA=new Int32Array(C),$0=new Uint32Array(C),Mr=new Float32Array(C),ZA=new Float64Array(C),Ir=new BigInt64Array(C),wx=new BigUint64Array(C)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function eA(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)oe(s.preRun.shift());e0("preRun"),fA(a0)}function NA(){k(!L0),L0=!0,X(),Ue.__wasm_call_ctors()}function Ux(){if(X(),s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Kx(s.postRun.shift());e0("postRun"),fA(Hx)}function U0(C){s.onAbort?.(C),C=`Aborted(${C})`,z(C),R=!0;var u=new WebAssembly.RuntimeError(C);throw N0?.(u),u}function O0(){U0("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var sx={init:O0,createDataFile:O0,createPreloadedFile:O0,createLazyFile:O0,open:O0,mkdev:O0,registerDevice:O0,analyzePath:O0,ErrnoError:O0};function V0(C,u){return(...y)=>{k(L0,`native function \`${C}\` called before runtime initialization`);var L=Ue[C];return k(L,`exported native function \`${C}\` not found`),k(y.length<=u,`native function \`${C}\` called with ${y.length} args but expects ${u}`),L(...y)}}var K0;function Y0(){return p0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1963
1963
|
\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
|
|
1964
1964
|
env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
|
|
1965
1965
|
random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07 \x07
|
|
@@ -2607,46 +2607,46 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
|
|
|
2607
2607
|
\x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
|
|
2608
2608
|
\xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
|
|
2609
2609
|
\0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
|
|
2610
|
-
A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function P0(C){return C}async function ie(C){return C}async function IA(C,u){try{var y=await ie(C),
|
|
2610
|
+
A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function P0(C){return C}async function ie(C){return C}async function IA(C,u){try{var y=await ie(C),L=await WebAssembly.instantiate(y,u);return L}catch(G){z(`failed to asynchronously prepare wasm: ${G}`),O(C)&&z(`warning: Loading from a file URI (${C}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),U0(G)}}async function Nr(C,u,y){return IA(u,y)}function C0(){var C={env:wa,wasi_snapshot_preview1:wa};return C}async function ae(){function C(A0,t0){return Ue=A0.exports,gl(Ue),cx(),Ue}var u=s;function y(A0){return k(s===u,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),u=null,C(A0.instance)}var L=C0();if(s.instantiateWasm)return new Promise((A0,t0)=>{try{s.instantiateWasm(L,(i0,u0)=>{A0(C(i0,u0))})}catch(i0){z(`Module.instantiateWasm callback failed with error: ${i0}`),t0(i0)}});K0??(K0=Y0());var G=await Nr(v0,K0,L),r0=y(G);return r0}class tA{constructor(u){s0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${u})`,this.status=u}}var bA,jA,Ir,nA,Mr,ZA,ox,$0,wx,Fx,fA=C=>{for(;C.length>0;)C.shift()(s)},Hx=[],Kx=C=>Hx.push(C),a0=[],oe=C=>a0.push(C),xr=!0;function ix(C){return k(typeof C=="number",`ptrToString expects a number, got ${typeof C}`),C>>>=0,"0x"+C.toString(16).padStart(8,"0")}var Ix=C=>{Ix.shown||(Ix.shown={}),Ix.shown[C]||(Ix.shown[C]=1,D&&(C="warning: "+C),z(C))};class lA{constructor(u){this.excPtr=u,this.ptr=u-24}set_type(u){$0[this.ptr+4>>2]=u}get_type(){return $0[this.ptr+4>>2]}set_destructor(u){$0[this.ptr+8>>2]=u}get_destructor(){return $0[this.ptr+8>>2]}set_caught(u){u=u?1:0,nA[this.ptr+12]=u}get_caught(){return nA[this.ptr+12]!=0}set_rethrown(u){u=u?1:0,nA[this.ptr+13]=u}get_rethrown(){return nA[this.ptr+13]!=0}init(u,y){this.set_adjusted_ptr(0),this.set_type(u),this.set_destructor(y)}set_adjusted_ptr(u){$0[this.ptr+16>>2]=u}get_adjusted_ptr(){return $0[this.ptr+16>>2]}}var Ar=0,EA=(C,u,y)=>{var L=new lA(C);L.init(u,y),Ar++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},Fe=()=>U0("native code called abort()"),z0={},BA=C=>{for(;C.length;){var u=C.pop(),y=C.pop();y(u)}};function J(C){return this.fromWireType($0[C>>2])}var mA={},Yx={},Qx={},y0=class extends Error{constructor(u){super(u),this.name="InternalError"}},j0=C=>{throw new y0(C)},cA=(C,u,y)=>{C.forEach(t0=>Qx[t0]=u);function L(t0){var i0=y(t0);i0.length!==C.length&&j0("Mismatched type converter count");for(var u0=0;u0<C.length;++u0)Sx(C[u0],i0[u0])}var G=new Array(u.length),r0=[],A0=0;for(let[t0,i0]of u.entries())Yx.hasOwnProperty(i0)?G[t0]=Yx[i0]:(r0.push(i0),mA.hasOwnProperty(i0)||(mA[i0]=[]),mA[i0].push(()=>{G[t0]=Yx[i0],++A0,A0===r0.length&&L(G)}));r0.length===0&&L(G)},rr=C=>{var u=z0[C];delete z0[C];var y=u.rawConstructor,L=u.rawDestructor,G=u.fields,r0=G.map(A0=>A0.getterReturnType).concat(G.map(A0=>A0.setterArgumentType));cA([C],r0,A0=>{var t0={};for(var[i0,u0]of G.entries()){let w0=A0[i0],ax=u0.getter,tx=u0.getterContext,Ex=A0[i0+G.length],xA=u0.setter,Px=u0.setterContext;t0[u0.fieldName]={read:kA=>w0.fromWireType(ax(tx,kA)),write:(kA,Fr)=>{var zA=[];xA(Px,kA,Ex.toWireType(zA,Fr)),BA(zA)},optional:w0.optional}}return[{name:u.name,fromWireType:w0=>{var ax={};for(var tx in t0)ax[tx]=t0[tx].read(w0);return L(w0),ax},toWireType:(w0,ax)=>{for(var tx in t0)if(!(tx in ax)&&!t0[tx].optional)throw new TypeError(`Missing field: "${tx}"`);var Ex=y();for(tx in t0)t0[tx].write(Ex,ax[tx]);return w0!==null&&w0.push(L,Ex),Ex},readValueFromPointer:J,destructorFunction:L}]})},jx=C=>{for(var u="";;){var y=Fx[C++];if(!y)return u;u+=String.fromCharCode(y)}},Ax=class extends Error{constructor(u){super(u),this.name="BindingError"}},_0=C=>{throw new Ax(C)};function er(C,u,y={}){var L=u.name;if(C||_0(`type "${L}" must have a positive integer typeid pointer`),Yx.hasOwnProperty(C)){if(y.ignoreDuplicateRegistrations)return;_0(`Cannot register type '${L}' twice`)}if(Yx[C]=u,delete Qx[C],mA.hasOwnProperty(C)){var G=mA[C];delete mA[C],G.forEach(r0=>r0())}}function Sx(C,u,y={}){return er(C,u,y)}var MA=(C,u,y)=>{switch(u){case 1:return y?L=>nA[L]:L=>Fx[L];case 2:return y?L=>bA[L>>1]:L=>ox[L>>1];case 4:return y?L=>jA[L>>2]:L=>$0[L>>2];case 8:return y?L=>Ir[L>>3]:L=>wx[L>>3];default:throw new TypeError(`invalid integer width (${u}): ${C}`)}},CA=C=>{if(C===null)return"null";var u=typeof C;return u==="object"||u==="array"||u==="function"?C.toString():""+C},iA=(C,u,y,L)=>{if(u<y||u>L)throw new TypeError(`Passing a number "${CA(u)}" from JS side to C/C++ side to an argument of type "${C}", which is outside the valid range [${y}, ${L}]!`)},ve=(C,u,y,L,G)=>{u=jx(u);let r0=L===0n,A0=t0=>t0;if(r0){let t0=y*8;A0=i0=>BigInt.asUintN(t0,i0),G=A0(G)}Sx(C,{name:u,fromWireType:A0,toWireType:(t0,i0)=>{if(typeof i0=="number")i0=BigInt(i0);else if(typeof i0!="bigint")throw new TypeError(`Cannot convert "${CA(i0)}" to ${u}`);return iA(u,i0,L,G),i0},readValueFromPointer:MA(u,y,!r0),destructorFunction:null})},i=(C,u,y,L)=>{u=jx(u),Sx(C,{name:u,fromWireType:function(G){return!!G},toWireType:function(G,r0){return r0?y:L},readValueFromPointer:function(G){return this.fromWireType(Fx[G])},destructorFunction:null})},h0=C=>({count:C.count,deleteScheduled:C.deleteScheduled,preservePointerOnDelete:C.preservePointerOnDelete,ptr:C.ptr,ptrType:C.ptrType,smartPtr:C.smartPtr,smartPtrType:C.smartPtrType}),pr=C=>{function u(y){return y.$$.ptrType.registeredClass.name}_0(u(C)+" instance already deleted")},hA=!1,dA=C=>{},fe=C=>{C.smartPtr?C.smartPtrType.rawDestructor(C.smartPtr):C.ptrType.registeredClass.rawDestructor(C.ptr)},tr=C=>{C.count.value-=1;var u=C.count.value===0;u&&fe(C)},Lr=(C,u,y)=>{if(u===y)return C;if(y.baseClass===void 0)return null;var L=Lr(C,u,y.baseClass);return L===null?null:y.downcast(L)},Rr={},le={},Ee=(C,u)=>{for(u===void 0&&_0("ptr should not be undefined");C.baseClass;)u=C.upcast(u),C=C.baseClass;return u},Be=(C,u)=>(u=Ee(C,u),le[u]),nr=(C,u)=>{(!u.ptrType||!u.ptr)&&j0("makeClassHandle requires ptr and ptrType");var y=!!u.smartPtrType,L=!!u.smartPtr;return y!==L&&j0("Both smartPtrType and smartPtr must be specified"),u.count={value:1},LA(Object.create(C,{$$:{value:u,writable:!0}}))};function Or(C){var u=this.getPointee(C);if(!u)return this.destructor(C),null;var y=Be(this.registeredClass,u);if(y!==void 0){if(y.$$.count.value===0)return y.$$.ptr=u,y.$$.smartPtr=C,y.clone();var L=y.clone();return this.destructor(C),L}function G(){return this.isSmartPointer?nr(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:u,smartPtrType:this,smartPtr:C}):nr(this.registeredClass.instancePrototype,{ptrType:this,ptr:C})}var r0=this.registeredClass.getActualType(u),A0=Rr[r0];if(!A0)return G.call(this);var t0;this.isConst?t0=A0.constPointerType:t0=A0.pointerType;var i0=Lr(u,this.registeredClass,t0.registeredClass);return i0===null?G.call(this):this.isSmartPointer?nr(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:i0,smartPtrType:this,smartPtr:C}):nr(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:i0})}var LA=C=>globalThis.FinalizationRegistry?(hA=new FinalizationRegistry(u=>{console.warn(u.leakWarning),tr(u.$$)}),LA=u=>{var y=u.$$,L=!!y.smartPtr;if(L){var G={$$:y},r0=y.ptrType.registeredClass,A0=new Error(`Embind found a leaked C++ instance ${r0.name} <${ix(y.ptr)}>.
|
|
2611
2611
|
We'll free it automatically in this case, but this functionality is not reliable across various environments.
|
|
2612
2612
|
Make sure to invoke .delete() manually once you're done with the instance instead.
|
|
2613
|
-
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(A0,Or),G.leakWarning=A0.stack.replace(/^Error: /,""),hA.register(u,G,u)}return u},dA=u=>hA.unregister(u),LA(C)):(LA=u=>u,C),sr=[],ce=()=>{for(;sr.length;){var C=sr.pop();C.$$.deleteScheduled=!1,C.delete()}},Gr,Ur=()=>{let C=RA.prototype;Object.assign(C,{isAliasOf(y){if(!(this instanceof RA)||!(y instanceof RA))return!1;var
|
|
2613
|
+
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(A0,Or),G.leakWarning=A0.stack.replace(/^Error: /,""),hA.register(u,G,u)}return u},dA=u=>hA.unregister(u),LA(C)):(LA=u=>u,C),sr=[],ce=()=>{for(;sr.length;){var C=sr.pop();C.$$.deleteScheduled=!1,C.delete()}},Gr,Ur=()=>{let C=RA.prototype;Object.assign(C,{isAliasOf(y){if(!(this instanceof RA)||!(y instanceof RA))return!1;var L=this.$$.ptrType.registeredClass,G=this.$$.ptr;y.$$=y.$$;for(var r0=y.$$.ptrType.registeredClass,A0=y.$$.ptr;L.baseClass;)G=L.upcast(G),L=L.baseClass;for(;r0.baseClass;)A0=r0.upcast(A0),r0=r0.baseClass;return L===r0&&G===A0},clone(){if(this.$$.ptr||pr(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var y=LA(Object.create(Object.getPrototypeOf(this),{$$:{value:h0(this.$$)}}));return y.$$.count.value+=1,y.$$.deleteScheduled=!1,y},delete(){this.$$.ptr||pr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&_0("Object already scheduled for deletion"),dA(this),tr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||pr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&_0("Object already scheduled for deletion"),sr.push(this),sr.length===1&&Gr&&Gr(ce),this.$$.deleteScheduled=!0,this}});let u=Symbol.dispose;u&&(C[u]=C.delete)};function RA(){}var ir=(C,u)=>Object.defineProperty(u,"name",{value:C}),br=(C,u,y)=>{if(C[u].overloadTable===void 0){var L=C[u];C[u]=function(...G){return C[u].overloadTable.hasOwnProperty(G.length)||_0(`Function '${y}' called with an invalid number of arguments (${G.length}) - expects one of (${C[u].overloadTable})!`),C[u].overloadTable[G.length].apply(this,G)},C[u].overloadTable=[],C[u].overloadTable[L.argCount]=L}},Hr=(C,u,y)=>{s.hasOwnProperty(C)?((y===void 0||s[C].overloadTable!==void 0&&s[C].overloadTable[y]!==void 0)&&_0(`Cannot register public name '${C}' twice`),br(s,C,C),s[C].overloadTable.hasOwnProperty(y)&&_0(`Cannot register multiple overloads of a function with the same number of arguments (${y})!`),s[C].overloadTable[y]=u):(s[C]=u,s[C].argCount=y)},Kr=48,Jr=57,Ce=C=>{k(typeof C=="string"),C=C.replace(/[^a-zA-Z0-9_]/g,"$");var u=C.charCodeAt(0);return u>=Kr&&u<=Jr?`_${C}`:C};function de(C,u,y,L,G,r0,A0,t0){this.name=C,this.constructor=u,this.instancePrototype=y,this.rawDestructor=L,this.baseClass=G,this.getActualType=r0,this.upcast=A0,this.downcast=t0,this.pureVirtualFunctions=[]}var ar=(C,u,y)=>{for(;u!==y;)u.upcast||_0(`Expected null or instance of ${y.name}, got an instance of ${u.name}`),C=u.upcast(C),u=u.baseClass;return C};function De(C,u){if(u===null)return this.isReference&&_0(`null is not a valid ${this.name}`),0;u.$$||_0(`Cannot pass "${CA(u)}" as a ${this.name}`),u.$$.ptr||_0(`Cannot pass deleted object as a pointer of type ${this.name}`);var y=u.$$.ptrType.registeredClass,L=ar(u.$$.ptr,y,this.registeredClass);return L}function ue(C,u){var y;if(u===null)return this.isReference&&_0(`null is not a valid ${this.name}`),this.isSmartPointer?(y=this.rawConstructor(),C!==null&&C.push(this.rawDestructor,y),y):0;(!u||!u.$$)&&_0(`Cannot pass "${CA(u)}" as a ${this.name}`),u.$$.ptr||_0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&u.$$.ptrType.isConst&&_0(`Cannot convert argument of type ${u.$$.smartPtrType?u.$$.smartPtrType.name:u.$$.ptrType.name} to parameter type ${this.name}`);var L=u.$$.ptrType.registeredClass;if(y=ar(u.$$.ptr,L,this.registeredClass),this.isSmartPointer)switch(u.$$.smartPtr===void 0&&_0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:u.$$.smartPtrType===this?y=u.$$.smartPtr:_0(`Cannot convert argument of type ${u.$$.smartPtrType?u.$$.smartPtrType.name:u.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:y=u.$$.smartPtr;break;case 2:if(u.$$.smartPtrType===this)y=u.$$.smartPtr;else{var G=u.clone();y=this.rawShare(y,k0.toHandle(()=>G.delete())),C!==null&&C.push(this.rawDestructor,y)}break;default:_0("Unsupported sharing policy")}return y}function zr(C,u){if(u===null)return this.isReference&&_0(`null is not a valid ${this.name}`),0;u.$$||_0(`Cannot pass "${CA(u)}" as a ${this.name}`),u.$$.ptr||_0(`Cannot pass deleted object as a pointer of type ${this.name}`),u.$$.ptrType.isConst&&_0(`Cannot convert argument of type ${u.$$.ptrType.name} to parameter type ${this.name}`);var y=u.$$.ptrType.registeredClass,L=ar(u.$$.ptr,y,this.registeredClass);return L}var Vr=()=>{Object.assign(OA.prototype,{getPointee(C){return this.rawGetPointee&&(C=this.rawGetPointee(C)),C},destructor(C){this.rawDestructor?.(C)},readValueFromPointer:J,fromWireType:Or})};function OA(C,u,y,L,G,r0,A0,t0,i0,u0,w0){this.name=C,this.registeredClass=u,this.isReference=y,this.isConst=L,this.isSmartPointer=G,this.pointeeType=r0,this.sharingPolicy=A0,this.rawGetPointee=t0,this.rawConstructor=i0,this.rawShare=u0,this.rawDestructor=w0,!G&&u.baseClass===void 0?L?(this.toWireType=De,this.destructorFunction=null):(this.toWireType=zr,this.destructorFunction=null):this.toWireType=ue}var Wr=(C,u,y)=>{s.hasOwnProperty(C)||j0("Replacing nonexistent public symbol"),s[C].overloadTable!==void 0&&y!==void 0?s[C].overloadTable[y]=u:(s[C]=u,s[C].argCount=y)},GA=[],jr=C=>{var u=GA[C];return u||(GA[C]=u=me.get(C)),k(me.get(C)==u,"table mirror is out of date"),u},Mx=(C,u,y=!1)=>{k(!y,"async bindings are only supported with JSPI"),C=jx(C);function L(){var r0=jr(u);return r0}var G=L();return typeof G!="function"&&_0(`unknown function pointer with signature ${C}: ${u}`),G};class pe extends Error{}var gA=C=>{var u=ka(C),y=jx(u);return gr(u),y},UA=(C,u)=>{var y=[],L={};function G(r0){if(!L[r0]&&!Yx[r0]){if(Qx[r0]){Qx[r0].forEach(G);return}y.push(r0),L[r0]=!0}}throw u.forEach(G),new pe(`${C}: `+y.map(gA).join([", "]))},mr=(C,u,y,L,G,r0,A0,t0,i0,u0,w0,ax,tx)=>{w0=jx(w0),r0=Mx(G,r0),t0&&(t0=Mx(A0,t0)),u0&&(u0=Mx(i0,u0)),tx=Mx(ax,tx);var Ex=Ce(w0);Hr(Ex,function(){UA(`Cannot construct ${w0} due to unbound types`,[L])}),cA([C,u,y],L?[L]:[],xA=>{var Px;xA=xA[0];var kA,Fr;L?(kA=xA.registeredClass,Fr=kA.instancePrototype):Fr=RA.prototype;var zA=ir(w0,function(...ls){if(Object.getPrototypeOf(this)!==He)throw new Ax(`Use 'new' to construct ${w0}`);if(vr.constructor_body===void 0)throw new Ax(`${w0} has no accessible constructor`);var $a=vr.constructor_body[ls.length];if($a===void 0)throw new Ax(`Tried to invoke ctor of ${w0} with invalid number of parameters (${ls.length}) - expected (${Object.keys(vr.constructor_body).toString()}) parameters instead!`);return $a.apply(this,ls)}),He=Object.create(Fr,{constructor:{value:zA}});zA.prototype=He;var vr=new de(w0,zA,He,tx,kA,r0,t0,u0);vr.baseClass&&((Px=vr.baseClass).__derivedClasses??(Px.__derivedClasses=[]),vr.baseClass.__derivedClasses.push(vr));var _l=new OA(w0,vr,!0,!1,!1),qa=new OA(w0+"*",vr,!1,!1,!1),Ta=new OA(w0+" const*",vr,!1,!0,!1);return Rr[C]={pointerType:qa,constPointerType:Ta},Wr(Ex,zA),[_l,qa,Ta]})},mx=(C,u)=>{for(var y=[],L=0;L<C;L++)y.push($0[u+L*4>>2]);return y};function or(C){for(var u=1;u<C.length;++u)if(C[u]!==null&&C[u].destructorFunction===void 0)return!0;return!1}function HA(C,u,y,L,G){if(C<u||C>y){var r0=u==y?u:`${u} to ${y}`;G(`function ${L} called with ${C} arguments, expected ${r0}`)}}function f(C,u,y,L){var G=or(C),r0=C.length-2,A0=[],t0=["fn"];u&&t0.push("thisWired");for(var i0=0;i0<r0;++i0)A0.push(`arg${i0}`),t0.push(`arg${i0}Wired`);A0=A0.join(","),t0=t0.join(",");var u0=`return function (${A0}) {
|
|
2614
2614
|
`;u0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
|
|
2615
2615
|
`,G&&(u0+=`var destructors = [];
|
|
2616
2616
|
`);var w0=G?"destructors":"null",ax=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];u&&(u0+=`var thisWired = toClassParamWire(${w0}, this);
|
|
2617
2617
|
`);for(var i0=0;i0<r0;++i0){var tx=`toArg${i0}Wire`;u0+=`var arg${i0}Wired = ${tx}(${w0}, arg${i0});
|
|
2618
|
-
`,ax.push(tx)}if(u0+=(y||
|
|
2618
|
+
`,ax.push(tx)}if(u0+=(y||L?"var rv = ":"")+`invoker(${t0});
|
|
2619
2619
|
`,G)u0+=`runDestructors(destructors);
|
|
2620
2620
|
`;else for(var i0=u?1:2;i0<C.length;++i0){var Ex=i0===1?"thisWired":"arg"+(i0-2)+"Wired";C[i0].destructorFunction!==null&&(u0+=`${Ex}_dtor(${Ex});
|
|
2621
2621
|
`,ax.push(`${Ex}_dtor`))}return y&&(u0+=`var ret = fromRetWire(rv);
|
|
2622
2622
|
return ret;
|
|
2623
2623
|
`),u0+=`}
|
|
2624
2624
|
`,ax.push("checkArgCount","minArgs","maxArgs"),u0=`if (arguments.length !== ${ax.length}){ throw new Error(humanName + "Expected ${ax.length} closure arguments " + arguments.length + " given."); }
|
|
2625
|
-
${u0}`,new Function(ax,u0)}function c(C){for(var u=C.length-2,y=C.length-1;y>=2&&C[y].optional;--y)u--;return u}function b(C,u,y,R,G,r0){var A0=u.length;A0<2&&_0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!r0,"async bindings are only supported with JSPI");for(var t0=u[1]!==null&&y!==null,i0=or(u),u0=!u[0].isVoid,w0=A0-2,ax=c(u),tx=u[0],Ex=u[1],xA=[C,_0,R,G,BA,tx.fromWireType.bind(tx),Ex?.toWireType.bind(Ex)],Px=2;Px<A0;++Px){var kA=u[Px];xA.push(kA.toWireType.bind(kA))}if(!i0)for(var Px=t0?1:2;Px<u.length;++Px)u[Px].destructorFunction!==null&&xA.push(u[Px].destructorFunction);xA.push(HA,ax,w0);var zA=f(u,t0,u0,r0)(...xA);return ir(C,zA)}var h=(C,u,y,R,G,r0)=>{k(u>0);var A0=mx(u,y);G=Mx(R,G),cA([],[C],t0=>{t0=t0[0];var i0=`constructor ${t0.name}`;if(t0.registeredClass.constructor_body===void 0&&(t0.registeredClass.constructor_body=[]),t0.registeredClass.constructor_body[u-1]!==void 0)throw new Ax(`Cannot register multiple constructors with identical number of parameters (${u-1}) for class '${t0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return t0.registeredClass.constructor_body[u-1]=()=>{UA(`Cannot construct ${t0.name} due to unbound types`,A0)},cA([],A0,u0=>(u0.splice(1,0,null),t0.registeredClass.constructor_body[u-1]=b(i0,u0,null,G,r0),[])),[]})},_=(C,u,y)=>(C instanceof Object||_0(`${y} with invalid "this": ${C}`),C instanceof u.registeredClass.constructor||_0(`${y} incompatible with "this" of type ${C.constructor.name}`),C.$$.ptr||_0(`cannot call emscripten binding method ${y} on deleted object`),ar(C.$$.ptr,C.$$.ptrType.registeredClass,u.registeredClass)),$=(C,u,y,R,G,r0,A0,t0,i0,u0)=>{u=jx(u),G=Mx(R,G),cA([],[C],w0=>{w0=w0[0];var ax=`${w0.name}.${u}`,tx={get(){UA(`Cannot access ${ax} due to unbound types`,[y,A0])},enumerable:!0,configurable:!0};return i0?tx.set=()=>UA(`Cannot access ${ax} due to unbound types`,[y,A0]):tx.set=Ex=>_0(ax+" is a read-only property"),Object.defineProperty(w0.registeredClass.instancePrototype,u,tx),cA([],i0?[y,A0]:[y],Ex=>{var xA=Ex[0],Px={get(){var Fr=_(this,w0,ax+" getter");return xA.fromWireType(G(r0,Fr))},enumerable:!0};if(i0){i0=Mx(t0,i0);var kA=Ex[1];Px.set=function(Fr){var zA=_(this,w0,ax+" setter"),He=[];i0(u0,zA,kA.toWireType(He,Fr)),BA(He)}}return Object.defineProperty(w0.registeredClass.instancePrototype,u,Px),[]}),[]})},J=[],Y=[0,1,,1,null,1,!0,1,!1,1],l0=C=>{if(C>9&&--Y[C+1]===0){k(Y[C]!==void 0,"decref for unallocated handle");var u=Y[C];Y[C]=void 0,J.push(C)}},k0={toValue:C=>(C||_0(`Cannot use deleted val. handle = ${C}`),k(C===2||Y[C]!==void 0&&C%2===0,`invalid handle: ${C}`),Y[C]),toHandle:C=>{switch(C){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let u=J.pop()||Y.length;return Y[u]=C,Y[u+1]=1,u}}}},Q0={name:"emscripten::val",fromWireType:C=>{var u=k0.toValue(C);return l0(C),u},toWireType:(C,u)=>k0.toHandle(u),readValueFromPointer:K,destructorFunction:null},H0=C=>Sx(C,Q0),R0=(C,u)=>{switch(u){case 4:return function(y){return this.fromWireType(Mr[y>>2])};case 8:return function(y){return this.fromWireType(ZA[y>>3])};default:throw new TypeError(`invalid float width (${u}): ${C}`)}},q0=(C,u,y)=>{u=jx(u),Sx(C,{name:u,fromWireType:R=>R,toWireType:(R,G)=>{if(typeof G!="number"&&typeof G!="boolean")throw new TypeError(`Cannot convert ${CA(G)} to ${u}`);return G},readValueFromPointer:R0(u,y),destructorFunction:null})},vx=C=>{C=C.trim();let u=C.indexOf("(");return u===-1?C:(k(C.endsWith(")"),"Parentheses for argument names should match."),C.slice(0,u))},gx=(C,u,y,R,G,r0,A0,t0)=>{var i0=mx(u,y);C=jx(C),C=vx(C),G=Mx(R,G,A0),Hr(C,function(){UA(`Cannot call ${C} due to unbound types`,i0)},u-1),cA([],i0,u0=>{var w0=[u0[0],null].concat(u0.slice(1));return Wr(C,b(C,w0,null,G,r0,A0),u-1),[]})},Lx=(C,u,y,R,G)=>{u=jx(u);let r0=R===0,A0=i0=>i0;if(r0){var t0=32-8*y;A0=i0=>i0<<t0>>>t0,G=A0(G)}Sx(C,{name:u,fromWireType:A0,toWireType:(i0,u0)=>{if(typeof u0!="number"&&typeof u0!="boolean")throw new TypeError(`Cannot convert "${CA(u0)}" to ${u}`);return iA(u,u0,R,G),u0},readValueFromPointer:MA(u,y,R!==0),destructorFunction:null})},Kx=(C,u,y)=>{var R=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],G=R[u];function r0(A0){var t0=$0[A0>>2],i0=$0[A0+4>>2];return new G(nA.buffer,i0,t0)}y=jx(y),Sx(C,{name:y,fromWireType:r0,readValueFromPointer:r0},{ignoreDuplicateRegistrations:!0})},zx=(C,u,y,R)=>{if(k(typeof C=="string",`stringToUTF8Array expects a string (got ${typeof C})`),!(R>0))return 0;for(var G=y,r0=y+R-1,A0=0;A0<C.length;++A0){var t0=C.codePointAt(A0);if(t0<=127){if(y>=r0)break;u[y++]=t0}else if(t0<=2047){if(y+1>=r0)break;u[y++]=192|t0>>6,u[y++]=128|t0&63}else if(t0<=65535){if(y+2>=r0)break;u[y++]=224|t0>>12,u[y++]=128|t0>>6&63,u[y++]=128|t0&63}else{if(y+3>=r0)break;t0>1114111&&Ix(`Invalid Unicode code point ${ix(t0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),u[y++]=240|t0>>18,u[y++]=128|t0>>12&63,u[y++]=128|t0>>6&63,u[y++]=128|t0&63,A0++}}return u[y]=0,y-G},JA=(C,u,y)=>(k(typeof y=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),zx(C,Fx,u,y)),Zx=C=>{for(var u=0,y=0;y<C.length;++y){var R=C.charCodeAt(y);R<=127?u++:R<=2047?u+=2:R>=55296&&R<=57343?(u+=4,++y):u+=3}return u},aA=globalThis.TextDecoder&&new TextDecoder,Cx=(C,u,y,R)=>{var G=u+y;if(R)return G;for(;C[u]&&!(u>=G);)++u;return u},pe=(C,u=0,y,R)=>{var G=Cx(C,u,y,R);if(G-u>16&&C.buffer&&aA)return aA.decode(C.subarray(u,G));for(var r0="";u<G;){var A0=C[u++];if(!(A0&128)){r0+=String.fromCharCode(A0);continue}var t0=C[u++]&63;if((A0&224)==192){r0+=String.fromCharCode((A0&31)<<6|t0);continue}var i0=C[u++]&63;if((A0&240)==224?A0=(A0&15)<<12|t0<<6|i0:((A0&248)!=240&&Ix(`Invalid UTF-8 leading byte ${ix(A0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),A0=(A0&7)<<18|t0<<12|i0<<6|C[u++]&63),A0<65536)r0+=String.fromCharCode(A0);else{var u0=A0-65536;r0+=String.fromCharCode(55296|u0>>10,56320|u0&1023)}}return r0},Ft=(C,u,y)=>(k(typeof C=="number",`UTF8ToString expects a number (got ${typeof C})`),C?pe(Fx,C,u,y):""),vt=(C,u)=>{u=jx(u);var y=!0;Sx(C,{name:u,fromWireType(R){var G=$0[R>>2],r0=R+4,A0;if(y)A0=Ft(r0,G,!0);else{A0="";for(var t0=0;t0<G;++t0)A0+=String.fromCharCode(Fx[r0+t0])}return gr(R),A0},toWireType(R,G){G instanceof ArrayBuffer&&(G=new Uint8Array(G));var r0,A0=typeof G=="string";A0||ArrayBuffer.isView(G)&&G.BYTES_PER_ELEMENT==1||_0("Cannot pass non-string to std::string"),y&&A0?r0=Zx(G):r0=G.length;var t0=os(4+r0+1),i0=t0+4;if($0[t0>>2]=r0,A0)if(y)JA(G,i0,r0+1);else for(var u0=0;u0<r0;++u0){var w0=G.charCodeAt(u0);w0>255&&(gr(t0),_0("String has UTF-16 code units that do not fit in 8 bits")),Fx[i0+u0]=w0}else Fx.set(G,i0);return R!==null&&R.push(gr,t0),t0},readValueFromPointer:K,destructorFunction(R){gr(R)}})},hr=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,ft=(C,u,y)=>{k(C%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var R=C>>1,G=Cx(ox,R,u/2,y);if(G-R>16&&hr)return hr.decode(ox.subarray(R,G));for(var r0="",A0=R;A0<G;++A0){var t0=ox[A0];r0+=String.fromCharCode(t0)}return r0},Ge=(C,u,y)=>{if(k(u%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof y=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<2)return 0;y-=2;for(var R=u,G=y<C.length*2?y/2:C.length,r0=0;r0<G;++r0){var A0=C.charCodeAt(r0);pA[u>>1]=A0,u+=2}return pA[u>>1]=0,u-R},Xr=C=>C.length*2,KA=(C,u,y)=>{k(C%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var R="",G=C>>2,r0=0;!(r0>=u/4);r0++){var A0=$0[G+r0];if(!A0&&!y)break;R+=String.fromCodePoint(A0)}return R},F=(C,u,y)=>{if(k(u%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof y=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<4)return 0;for(var R=u,G=R+y-4,r0=0;r0<C.length;++r0){var A0=C.codePointAt(r0);if(A0>65535&&r0++,jA[u>>2]=A0,u+=4,u+4>G)break}return jA[u>>2]=0,u-R},n=C=>{for(var u=0,y=0;y<C.length;++y){var R=C.codePointAt(y);R>65535&&y++,u+=4}return u},o=(C,u,y)=>{y=jx(y);var R,G,r0;u===2?(R=ft,G=Ge,r0=Xr):(k(u===4,"only 2-byte and 4-byte strings are currently supported"),R=KA,G=F,r0=n),Sx(C,{name:y,fromWireType:A0=>{var t0=$0[A0>>2],i0=R(A0+4,t0*u,!0);return gr(A0),i0},toWireType:(A0,t0)=>{typeof t0!="string"&&_0(`Cannot pass non-string to C++ string type ${y}`);var i0=r0(t0),u0=os(4+i0+u);return $0[u0>>2]=i0/u,G(t0,u0+4,i0+u),A0!==null&&A0.push(gr,u0),u0},readValueFromPointer:K,destructorFunction(A0){gr(A0)}})},v=(C,u,y,R,G,r0)=>{z0[C]={name:jx(u),rawConstructor:Mx(y,R),rawDestructor:Mx(G,r0),fields:[]}},E=(C,u,y,R,G,r0,A0,t0,i0,u0)=>{z0[C].fields.push({fieldName:jx(u),getterReturnType:y,getter:Mx(R,G),getterContext:r0,setterArgumentType:A0,setter:Mx(t0,i0),setterContext:u0})},d=(C,u)=>{u=jx(u),Sx(C,{isVoid:!0,name:u,fromWireType:()=>{},toWireType:(y,R)=>{}})},m=[],w=C=>{var u=m.length;return m.push(C),u},I=(C,u)=>{var y=Yx[C];return y===void 0&&_0(`${u} has unknown type ${gA(C)}`),y},Q=(C,u)=>{for(var y=new Array(C),R=0;R<C;++R)y[R]=I($0[u+R*4>>2],`parameter ${R}`);return y},d0=(C,u,y)=>{var R=[],G=C(R,y);return R.length&&($0[u>>2]=k0.toHandle(R)),G},g0={},D0=C=>{var u=g0[C];return u===void 0?jx(C):u},B0=(C,u,y)=>{var R=8,[G,...r0]=Q(C,u),A0=G.toWireType.bind(G),t0=r0.map(Ex=>Ex.readValueFromPointer.bind(Ex));C--;var i0={toValue:k0.toValue},u0=t0.map((Ex,xA)=>{var Px=`argFromPtr${xA}`;return i0[Px]=Ex,`${Px}(args${xA?"+"+xA*R:""})`}),w0;switch(y){case 0:w0="toValue(handle)";break;case 2:w0="new (toValue(handle))";break;case 3:w0="";break;case 1:i0.getStringOrSymbol=D0,w0="toValue(handle)[getStringOrSymbol(methodName)]";break}w0+=`(${u0})`,G.isVoid||(i0.toReturnWire=A0,i0.emval_returnValue=d0,w0=`return emval_returnValue(toReturnWire, destructorsRef, ${w0})`),w0=`return function (handle, methodName, destructorsRef, args) {
|
|
2625
|
+
${u0}`,new Function(ax,u0)}function c(C){for(var u=C.length-2,y=C.length-1;y>=2&&C[y].optional;--y)u--;return u}function p(C,u,y,L,G,r0){var A0=u.length;A0<2&&_0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!r0,"async bindings are only supported with JSPI");for(var t0=u[1]!==null&&y!==null,i0=or(u),u0=!u[0].isVoid,w0=A0-2,ax=c(u),tx=u[0],Ex=u[1],xA=[C,_0,L,G,BA,tx.fromWireType.bind(tx),Ex?.toWireType.bind(Ex)],Px=2;Px<A0;++Px){var kA=u[Px];xA.push(kA.toWireType.bind(kA))}if(!i0)for(var Px=t0?1:2;Px<u.length;++Px)u[Px].destructorFunction!==null&&xA.push(u[Px].destructorFunction);xA.push(HA,ax,w0);var zA=f(u,t0,u0,r0)(...xA);return ir(C,zA)}var h=(C,u,y,L,G,r0)=>{k(u>0);var A0=mx(u,y);G=Mx(L,G),cA([],[C],t0=>{t0=t0[0];var i0=`constructor ${t0.name}`;if(t0.registeredClass.constructor_body===void 0&&(t0.registeredClass.constructor_body=[]),t0.registeredClass.constructor_body[u-1]!==void 0)throw new Ax(`Cannot register multiple constructors with identical number of parameters (${u-1}) for class '${t0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return t0.registeredClass.constructor_body[u-1]=()=>{UA(`Cannot construct ${t0.name} due to unbound types`,A0)},cA([],A0,u0=>(u0.splice(1,0,null),t0.registeredClass.constructor_body[u-1]=p(i0,u0,null,G,r0),[])),[]})},_=(C,u,y)=>(C instanceof Object||_0(`${y} with invalid "this": ${C}`),C instanceof u.registeredClass.constructor||_0(`${y} incompatible with "this" of type ${C.constructor.name}`),C.$$.ptr||_0(`cannot call emscripten binding method ${y} on deleted object`),ar(C.$$.ptr,C.$$.ptrType.registeredClass,u.registeredClass)),$=(C,u,y,L,G,r0,A0,t0,i0,u0)=>{u=jx(u),G=Mx(L,G),cA([],[C],w0=>{w0=w0[0];var ax=`${w0.name}.${u}`,tx={get(){UA(`Cannot access ${ax} due to unbound types`,[y,A0])},enumerable:!0,configurable:!0};return i0?tx.set=()=>UA(`Cannot access ${ax} due to unbound types`,[y,A0]):tx.set=Ex=>_0(ax+" is a read-only property"),Object.defineProperty(w0.registeredClass.instancePrototype,u,tx),cA([],i0?[y,A0]:[y],Ex=>{var xA=Ex[0],Px={get(){var Fr=_(this,w0,ax+" getter");return xA.fromWireType(G(r0,Fr))},enumerable:!0};if(i0){i0=Mx(t0,i0);var kA=Ex[1];Px.set=function(Fr){var zA=_(this,w0,ax+" setter"),He=[];i0(u0,zA,kA.toWireType(He,Fr)),BA(He)}}return Object.defineProperty(w0.registeredClass.instancePrototype,u,Px),[]}),[]})},K=[],Y=[0,1,,1,null,1,!0,1,!1,1],l0=C=>{if(C>9&&--Y[C+1]===0){k(Y[C]!==void 0,"decref for unallocated handle");var u=Y[C];Y[C]=void 0,K.push(C)}},k0={toValue:C=>(C||_0(`Cannot use deleted val. handle = ${C}`),k(C===2||Y[C]!==void 0&&C%2===0,`invalid handle: ${C}`),Y[C]),toHandle:C=>{switch(C){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let u=K.pop()||Y.length;return Y[u]=C,Y[u+1]=1,u}}}},Q0={name:"emscripten::val",fromWireType:C=>{var u=k0.toValue(C);return l0(C),u},toWireType:(C,u)=>k0.toHandle(u),readValueFromPointer:J,destructorFunction:null},H0=C=>Sx(C,Q0),R0=(C,u)=>{switch(u){case 4:return function(y){return this.fromWireType(Mr[y>>2])};case 8:return function(y){return this.fromWireType(ZA[y>>3])};default:throw new TypeError(`invalid float width (${u}): ${C}`)}},q0=(C,u,y)=>{u=jx(u),Sx(C,{name:u,fromWireType:L=>L,toWireType:(L,G)=>{if(typeof G!="number"&&typeof G!="boolean")throw new TypeError(`Cannot convert ${CA(G)} to ${u}`);return G},readValueFromPointer:R0(u,y),destructorFunction:null})},vx=C=>{C=C.trim();let u=C.indexOf("(");return u===-1?C:(k(C.endsWith(")"),"Parentheses for argument names should match."),C.slice(0,u))},gx=(C,u,y,L,G,r0,A0,t0)=>{var i0=mx(u,y);C=jx(C),C=vx(C),G=Mx(L,G,A0),Hr(C,function(){UA(`Cannot call ${C} due to unbound types`,i0)},u-1),cA([],i0,u0=>{var w0=[u0[0],null].concat(u0.slice(1));return Wr(C,p(C,w0,null,G,r0,A0),u-1),[]})},Lx=(C,u,y,L,G)=>{u=jx(u);let r0=L===0,A0=i0=>i0;if(r0){var t0=32-8*y;A0=i0=>i0<<t0>>>t0,G=A0(G)}Sx(C,{name:u,fromWireType:A0,toWireType:(i0,u0)=>{if(typeof u0!="number"&&typeof u0!="boolean")throw new TypeError(`Cannot convert "${CA(u0)}" to ${u}`);return iA(u,u0,L,G),u0},readValueFromPointer:MA(u,y,L!==0),destructorFunction:null})},Jx=(C,u,y)=>{var L=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],G=L[u];function r0(A0){var t0=$0[A0>>2],i0=$0[A0+4>>2];return new G(nA.buffer,i0,t0)}y=jx(y),Sx(C,{name:y,fromWireType:r0,readValueFromPointer:r0},{ignoreDuplicateRegistrations:!0})},zx=(C,u,y,L)=>{if(k(typeof C=="string",`stringToUTF8Array expects a string (got ${typeof C})`),!(L>0))return 0;for(var G=y,r0=y+L-1,A0=0;A0<C.length;++A0){var t0=C.codePointAt(A0);if(t0<=127){if(y>=r0)break;u[y++]=t0}else if(t0<=2047){if(y+1>=r0)break;u[y++]=192|t0>>6,u[y++]=128|t0&63}else if(t0<=65535){if(y+2>=r0)break;u[y++]=224|t0>>12,u[y++]=128|t0>>6&63,u[y++]=128|t0&63}else{if(y+3>=r0)break;t0>1114111&&Ix(`Invalid Unicode code point ${ix(t0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),u[y++]=240|t0>>18,u[y++]=128|t0>>12&63,u[y++]=128|t0>>6&63,u[y++]=128|t0&63,A0++}}return u[y]=0,y-G},KA=(C,u,y)=>(k(typeof y=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),zx(C,Fx,u,y)),Zx=C=>{for(var u=0,y=0;y<C.length;++y){var L=C.charCodeAt(y);L<=127?u++:L<=2047?u+=2:L>=55296&&L<=57343?(u+=4,++y):u+=3}return u},aA=globalThis.TextDecoder&&new TextDecoder,Cx=(C,u,y,L)=>{var G=u+y;if(L)return G;for(;C[u]&&!(u>=G);)++u;return u},be=(C,u=0,y,L)=>{var G=Cx(C,u,y,L);if(G-u>16&&C.buffer&&aA)return aA.decode(C.subarray(u,G));for(var r0="";u<G;){var A0=C[u++];if(!(A0&128)){r0+=String.fromCharCode(A0);continue}var t0=C[u++]&63;if((A0&224)==192){r0+=String.fromCharCode((A0&31)<<6|t0);continue}var i0=C[u++]&63;if((A0&240)==224?A0=(A0&15)<<12|t0<<6|i0:((A0&248)!=240&&Ix(`Invalid UTF-8 leading byte ${ix(A0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),A0=(A0&7)<<18|t0<<12|i0<<6|C[u++]&63),A0<65536)r0+=String.fromCharCode(A0);else{var u0=A0-65536;r0+=String.fromCharCode(55296|u0>>10,56320|u0&1023)}}return r0},Ft=(C,u,y)=>(k(typeof C=="number",`UTF8ToString expects a number (got ${typeof C})`),C?be(Fx,C,u,y):""),vt=(C,u)=>{u=jx(u);var y=!0;Sx(C,{name:u,fromWireType(L){var G=$0[L>>2],r0=L+4,A0;if(y)A0=Ft(r0,G,!0);else{A0="";for(var t0=0;t0<G;++t0)A0+=String.fromCharCode(Fx[r0+t0])}return gr(L),A0},toWireType(L,G){G instanceof ArrayBuffer&&(G=new Uint8Array(G));var r0,A0=typeof G=="string";A0||ArrayBuffer.isView(G)&&G.BYTES_PER_ELEMENT==1||_0("Cannot pass non-string to std::string"),y&&A0?r0=Zx(G):r0=G.length;var t0=vs(4+r0+1),i0=t0+4;if($0[t0>>2]=r0,A0)if(y)KA(G,i0,r0+1);else for(var u0=0;u0<r0;++u0){var w0=G.charCodeAt(u0);w0>255&&(gr(t0),_0("String has UTF-16 code units that do not fit in 8 bits")),Fx[i0+u0]=w0}else Fx.set(G,i0);return L!==null&&L.push(gr,t0),t0},readValueFromPointer:J,destructorFunction(L){gr(L)}})},hr=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,ft=(C,u,y)=>{k(C%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var L=C>>1,G=Cx(ox,L,u/2,y);if(G-L>16&&hr)return hr.decode(ox.subarray(L,G));for(var r0="",A0=L;A0<G;++A0){var t0=ox[A0];r0+=String.fromCharCode(t0)}return r0},Ge=(C,u,y)=>{if(k(u%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof y=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<2)return 0;y-=2;for(var L=u,G=y<C.length*2?y/2:C.length,r0=0;r0<G;++r0){var A0=C.charCodeAt(r0);bA[u>>1]=A0,u+=2}return bA[u>>1]=0,u-L},Xr=C=>C.length*2,JA=(C,u,y)=>{k(C%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var L="",G=C>>2,r0=0;!(r0>=u/4);r0++){var A0=$0[G+r0];if(!A0&&!y)break;L+=String.fromCodePoint(A0)}return L},F=(C,u,y)=>{if(k(u%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof y=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<4)return 0;for(var L=u,G=L+y-4,r0=0;r0<C.length;++r0){var A0=C.codePointAt(r0);if(A0>65535&&r0++,jA[u>>2]=A0,u+=4,u+4>G)break}return jA[u>>2]=0,u-L},n=C=>{for(var u=0,y=0;y<C.length;++y){var L=C.codePointAt(y);L>65535&&y++,u+=4}return u},o=(C,u,y)=>{y=jx(y);var L,G,r0;u===2?(L=ft,G=Ge,r0=Xr):(k(u===4,"only 2-byte and 4-byte strings are currently supported"),L=JA,G=F,r0=n),Sx(C,{name:y,fromWireType:A0=>{var t0=$0[A0>>2],i0=L(A0+4,t0*u,!0);return gr(A0),i0},toWireType:(A0,t0)=>{typeof t0!="string"&&_0(`Cannot pass non-string to C++ string type ${y}`);var i0=r0(t0),u0=vs(4+i0+u);return $0[u0>>2]=i0/u,G(t0,u0+4,i0+u),A0!==null&&A0.push(gr,u0),u0},readValueFromPointer:J,destructorFunction(A0){gr(A0)}})},v=(C,u,y,L,G,r0)=>{z0[C]={name:jx(u),rawConstructor:Mx(y,L),rawDestructor:Mx(G,r0),fields:[]}},B=(C,u,y,L,G,r0,A0,t0,i0,u0)=>{z0[C].fields.push({fieldName:jx(u),getterReturnType:y,getter:Mx(L,G),getterContext:r0,setterArgumentType:A0,setter:Mx(t0,i0),setterContext:u0})},d=(C,u)=>{u=jx(u),Sx(C,{isVoid:!0,name:u,fromWireType:()=>{},toWireType:(y,L)=>{}})},m=[],w=C=>{var u=m.length;return m.push(C),u},I=(C,u)=>{var y=Yx[C];return y===void 0&&_0(`${u} has unknown type ${gA(C)}`),y},Q=(C,u)=>{for(var y=new Array(C),L=0;L<C;++L)y[L]=I($0[u+L*4>>2],`parameter ${L}`);return y},d0=(C,u,y)=>{var L=[],G=C(L,y);return L.length&&($0[u>>2]=k0.toHandle(L)),G},g0={},D0=C=>{var u=g0[C];return u===void 0?jx(C):u},B0=(C,u,y)=>{var L=8,[G,...r0]=Q(C,u),A0=G.toWireType.bind(G),t0=r0.map(Ex=>Ex.readValueFromPointer.bind(Ex));C--;var i0={toValue:k0.toValue},u0=t0.map((Ex,xA)=>{var Px=`argFromPtr${xA}`;return i0[Px]=Ex,`${Px}(args${xA?"+"+xA*L:""})`}),w0;switch(y){case 0:w0="toValue(handle)";break;case 2:w0="new (toValue(handle))";break;case 3:w0="";break;case 1:i0.getStringOrSymbol=D0,w0="toValue(handle)[getStringOrSymbol(methodName)]";break}w0+=`(${u0})`,G.isVoid||(i0.toReturnWire=A0,i0.emval_returnValue=d0,w0=`return emval_returnValue(toReturnWire, destructorsRef, ${w0})`),w0=`return function (handle, methodName, destructorsRef, args) {
|
|
2626
2626
|
${w0}
|
|
2627
|
-
}`;var ax=new Function(Object.keys(i0),w0)(...Object.values(i0)),tx=`methodCaller<(${r0.map(Ex=>Ex.name)}) => ${G.name}>`;return w(ir(tx,ax))},c0=C=>(C=D0(C),k0.toHandle(s[C])),I0=(C,u)=>(C=k0.toValue(C),u=k0.toValue(u),k0.toHandle(C[u])),Z0=C=>{C>9&&(Y[C+1]+=1)},fx=(C,u,y,R,G)=>m[C](u,y,R,G),dx=C=>k0.toHandle(D0(C)),qx=C=>{var u=k0.toValue(C);BA(u),l0(C)},Rx=()=>2147483648,Tx=(C,u)=>(k(u,"alignment argument is required"),Math.ceil(C/u)*u),lx=C=>{var u=Kt.buffer.byteLength,y=(C-u+65535)/65536|0;try{return Kt.grow(y),cx(),1}catch(R){z(`growMemory: Attempted to grow heap from ${u} bytes to ${C} bytes, but got error: ${R}`)}},$x=C=>{var u=Fx.length;C>>>=0,k(C>u);var y=Rx();if(C>y)return z(`Cannot enlarge memory, requested ${C} bytes, but the limit is ${y} bytes!`),!1;for(var R=1;R<=4;R*=2){var G=u*(1+.2/R);G=Math.min(G,C+100663296);var r0=Math.min(y,Tx(Math.max(C,G),65536)),A0=lx(r0);if(A0)return!0}return z(`Failed to grow the heap from ${u} bytes to ${r0} bytes, not enough memory!`),!1},qf=C=>{U0("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Tf=9007199254740992,$f=-9007199254740992,Pf=C=>C<$f||C>Tf?NaN:Number(C);function Nf(C,u,y,R){return u=Pf(u),70}var ns=[null,[],[]],ss=(C,u)=>{var y=ns[C];k(y),u===0||u===10?((C===1?N:z)(pe(y)),y.length=0):y.push(u)},N6=()=>{ga(0),ns[1].length&&ss(1,10),ns[2].length&&ss(2,10)},If=(C,u,y,R)=>{for(var G=0,r0=0;r0<y;r0++){var A0=$0[u>>2],t0=$0[u+4>>2];u+=8;for(var i0=0;i0<t0;i0++)ss(C,Fx[A0+i0]);G+=t0}return $0[R>>2]=G,0},Mf=()=>{if(D){var C=require("crypto");return u=>C.randomFillSync(u)}return u=>(crypto.getRandomValues(u),0)},pa=C=>(pa=Mf())(C),Lf=(C,u)=>pa(Fx.subarray(C,C+u)),Rf=(C,u)=>{if(je)for(var y=C;y<C+u;y++){var R=jr(y);R&&je.set(R,y)}},je,Of=C=>(je||(je=new WeakMap,Rf(0,me.length)),je.get(C)||0),is=[],Gf=()=>{if(is.length)return is.pop();try{return me.grow(1)}catch(C){if(!(C instanceof RangeError))throw C;U0("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},as=(C,u)=>{me.set(C,u),GA[C]=me.get(C)},ja=C=>{let u=C.length;return k(u<16384),[u%128|128,u>>7,...C]},Uf={i:127,p:127,j:126,f:125,d:124,e:111},ma=C=>ja(Array.from(C,u=>{var y=Uf[u];return k(y,`invalid signature char: ${u}`),y})),Hf=(C,u)=>{var y=Uint8Array.of(0,97,115,109,1,0,0,0,1,...ja([1,96,...ma(u.slice(1)),...ma(u[0]==="v"?"":u[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),R=new WebAssembly.Module(y),G=new WebAssembly.Instance(R,{e:{f:C}}),r0=G.exports.f;return r0},Jf=(C,u)=>{k(typeof C<"u");var y=Of(C);if(y)return y;var R=Gf();try{as(R,C)}catch(r0){if(!(r0 instanceof TypeError))throw r0;k(typeof u<"u","Missing signature argument to addFunction: "+C);var G=Hf(C,u);as(R,G)}return je.set(C,R),R},Kf=C=>{je.delete(jr(C)),as(C,null),is.push(C)};Ur(),Vr(),k(Y.length===10);{if(s.noExitRuntime&&(xr=s.noExitRuntime),s.print&&(N=s.print),s.printErr&&(z=s.printErr),s.wasmBinary&&(v0=s.wasmBinary),s.FS_createDataFile=sx.createDataFile,s.FS_createPreloadedFile=sx.createPreloadedFile,Wf(),s.arguments&&(j=s.arguments),s.thisProgram&&(g=s.thisProgram),k(typeof s.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof s.read>"u","Module.read option was removed"),k(typeof s.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof s.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof s.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof s.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof s.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof s.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof s.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof s.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();e0("preInit")}s.addFunction=Jf,s.removeFunction=Kf;var zf=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];zf.forEach(F0);var Vf=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];Vf.forEach(E0);function Wf(){f0("fetchSettings"),f0("logReadFiles"),f0("loadSplitModule"),f0("onMalloc"),f0("onRealloc"),f0("onFree"),f0("onSbrkGrow")}var ha=x0("___getTypeName"),os=x0("_malloc"),gr=x0("_free"),Xf=s._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),Yf=s._MdnCom_Free=x0("_MdnCom_Free"),Qf=s._MdnCom_RawRx=x0("_MdnCom_RawRx"),Zf=s._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),xl=s._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),Al=s._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),rl=s._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),el=s._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),tl=s._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),nl=s._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),sl=s._MdnCom_Init=x0("_MdnCom_Init"),il=s._SendUtoQuery=x0("_SendUtoQuery"),al=s._SendUtoCmdExt=x0("_SendUtoCmdExt"),ga=x0("_fflush"),Fs=x0("_emscripten_stack_get_end"),ol=x0("_emscripten_stack_get_base"),Fl=x0("_strerror"),ka=x0("_emscripten_stack_init"),vl=x0("_emscripten_stack_get_free"),fl=x0("__emscripten_stack_restore"),ll=x0("__emscripten_stack_alloc"),El=x0("_emscripten_stack_get_current"),Bl=x0("memory"),cl=x0("__indirect_function_table"),Kt=x0("wasmMemory"),me=x0("wasmTable");function Cl(C){k(typeof C.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof C.malloc<"u","missing Wasm export: malloc"),k(typeof C.free<"u","missing Wasm export: free"),k(typeof C.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof C.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof C.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof C.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof C.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof C.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof C.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof C.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof C.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof C.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof C.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof C.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof C.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof C.fflush<"u","missing Wasm export: fflush"),k(typeof C.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof C.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof C.strerror<"u","missing Wasm export: strerror"),k(typeof C.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof C.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof C._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof C._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof C.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof C.memory<"u","missing Wasm export: memory"),k(typeof C.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),ha=V0("__getTypeName",1),os=V0("malloc",1),gr=V0("free",1),Xf=s._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Yf=s._MdnCom_Free=V0("MdnCom_Free",1),Qf=s._MdnCom_RawRx=V0("MdnCom_RawRx",1),Zf=s._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),xl=s._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Al=s._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),rl=s._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),el=s._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),tl=s._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),nl=s._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),sl=s._MdnCom_Init=V0("MdnCom_Init",2),il=s._SendUtoQuery=V0("SendUtoQuery",2),al=s._SendUtoCmdExt=V0("SendUtoCmdExt",4),ga=V0("fflush",1),Fs=C.emscripten_stack_get_end,ol=C.emscripten_stack_get_base,Fl=V0("strerror",1),ka=C.emscripten_stack_init,vl=C.emscripten_stack_get_free,fl=C._emscripten_stack_restore,ll=C._emscripten_stack_alloc,El=C.emscripten_stack_get_current,Bl=Kt=C.memory,cl=me=C.__indirect_function_table}var ya={__cxa_throw:EA,_abort_js:Fe,_embind_finalize_value_object:rr,_embind_register_bigint:ve,_embind_register_bool:i,_embind_register_class:mr,_embind_register_class_constructor:h,_embind_register_class_property:$,_embind_register_emval:H0,_embind_register_float:q0,_embind_register_function:gx,_embind_register_integer:Lx,_embind_register_memory_view:Kx,_embind_register_std_string:vt,_embind_register_std_wstring:o,_embind_register_value_object:v,_embind_register_value_object_field:E,_embind_register_void:d,_emval_create_invoker:B0,_emval_decref:l0,_emval_get_module_property:c0,_emval_get_property:I0,_emval_incref:Z0,_emval_invoke:fx,_emval_new_cstring:dx,_emval_run_destructors:qx,emscripten_resize_heap:$x,fd_close:qf,fd_seek:Nf,fd_write:If,random_get:Lf},_a;function dl(){ka(),W()}function Dl(){dl(),eA();function C(){k(!_a),_a=!0,s.calledRun=!0,!L&&(NA(),p0?.(s),s.onRuntimeInitialized?.(),e0("onRuntimeInitialized"),k(!s._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),Ux())}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),C()},1)):C(),X()}var Ue;Ue=await ae(),Dl(),L0?a=s:a=new Promise((C,u)=>{p0=C,N0=u});for(let C of Object.keys(s))C in t||Object.defineProperty(t,C,{configurable:!0,get(){U0(`Access to module property ('${C}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),KF={};Kc(KF,{API_STAMP_UNBOUNDED:()=>h8,AT_COMMANDS:()=>Gx,AT_COMMAND_TIMEOUT_MS:()=>FA,ApiBadRequestError:()=>M0,ApiForbiddenError:()=>Hn,ApiMethodNotAllowedError:()=>Ki,ApiNotFoundError:()=>$A,AtCommandHandler:()=>DD,AtDeviceError:()=>Ji,AtHandlerDisposedError:()=>sA,BACKFILL_PENDING_HEADER:()=>bv,BACKFILL_PENDING_VALUE:()=>pv,BLE_CONFIGURATION:()=>OD,BLE_SCAN_TIMEOUT_MS:()=>UD,COMPANION_AUTH_ERROR_I18N_KEYS:()=>pD,COMPANION_CERT_PATH:()=>Fi,COMPANION_PRIVATE_KEY_SIZE:()=>r8,COMPANION_PUBLIC_KEY_SIZE:()=>A8,CertApiError:()=>qt,CompanionAuthErrorKind:()=>xv,CompanionAuthManager:()=>bD,CompanionCertError:()=>Q8,DDE_FIELD_UNUSED_INDEX:()=>p8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>n8,DEFAULT_RECONNECT_OPTIONS:()=>ov,DLO_FILENAME:()=>et,DdeMapper:()=>AD,DdeUnknownAliasError:()=>$i,DdeUnknownContainerError:()=>te,DdeUnknownFieldError:()=>Ui,DdeWriteForbiddenError:()=>Pt,DebugLogLevel:()=>D8,DebugMaster:()=>GC,DebugSync:()=>V8,DeviceManager:()=>LD,DeviceState:()=>av,FW_FILENAME:()=>_i,LIC_API_BASE_URL:()=>H8,LOCAL_API_LIFECYCLE_FLAGS:()=>Ne,LOCAL_API_SITE_MASK:()=>ji,LOCAL_API_SITE_MASTER_KEYS:()=>Ot,LegacySync:()=>K8,LocalDataManager:()=>tv,MANUFACTURER_CODE:()=>GD,MS_1999_12_31:()=>vi,MemoryStorage:()=>HC,Mutex:()=>Si,OfflineSyncManager:()=>FD,RAW_TERMINAL_PATTERN:()=>X8,RESPONSE_PATTERNS:()=>rx,Rm2mStateManager:()=>ND,SYNC_LOGIC_MASK:()=>E8,SyncManager:()=>CD,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>W8,USB_CONFIGURATION:()=>RD,UplinkMode:()=>c8,UtoCommand:()=>i8,UtoESC:()=>B8,UtoFileFlag:()=>f8,UtoFileFlagInt:()=>l8,UtoFileType:()=>F8,UtoFlag:()=>v8,UtoMaster:()=>d8,UtoResult:()=>a8,UtoSplitTag:()=>o8,UtoTag:()=>wi,WebSocketBridge:()=>Hi,applyBlueprintNames:()=>G8,applyDecpl:()=>bd,assertValidRequestStamps:()=>it,base64ToBytes:()=>oi,base64UrlToBytes:()=>bC,buildBlueprintNameMap:()=>ui,bytesToBase64:()=>Sn,bytesToBase64Url:()=>gi,checkDeviceCapabilities:()=>gD,computeDisplayValue:()=>ev,computeDisplayValues:()=>pi,consoleLogger:()=>Dr,convertToString:()=>fi,crc16Modbus:()=>kC,crc32Ethernet:()=>yi,createDebugBufferState:()=>Y8,createLocalApiHandler:()=>Zu,createLocalApiSession:()=>Vi,createSiteInfoFromDde:()=>i7,dbStampToStamp40:()=>dr,decodeContainer:()=>Ci,decodeFloatm16:()=>$8,decodeLifecycleFlags:()=>lv,decodeRm2mStateResponse:()=>iv,decodeUplinkState:()=>nv,deriveDeviceLifecycleMirror:()=>Ev,encodeContainer:()=>Di,encodeFloatm16:()=>P8,encodeLifecycleFlags:()=>Xi,encodeNulPaddedJson:()=>vv,encodeSerialNumber:()=>yC,extractBits:()=>Pn,formatApiStamp:()=>tt,generateCompanionKeypair:()=>ai,getDeviceAssignment:()=>J8,isCertValid:()=>ki,isDevicePushableTag:()=>j8,isUnusedField:()=>Pr,isValidStamp:()=>zi,mapLocalApiError:()=>Pv,nullLogger:()=>qn,parseApiStamp:()=>st,parseBlueprint:()=>eD,parseDde:()=>Cd,parseMetadataResponse:()=>Av,parseNulPaddedJson:()=>Rt,parseRm2mStateParams:()=>sv,parseSerialNumberFromDataView:()=>_C,parseValuesResponse:()=>rv,requestCompanionCert:()=>s8,resolveAuthErrorKind:()=>jD,resolveBlueprintNameMap:()=>Lt,resolveContainerTag:()=>$n,resolveTagForContainer:()=>wt,resolveTagInModel:()=>zC,routeLocalApiRequest:()=>Tv,spreadBits:()=>k8,stamp40ToDbHex:()=>TA,syncLogic:()=>Tn,systemTimeSource:()=>Mt,toHex:()=>ee,toUint8Array:()=>li,utoStack:()=>ex});Nv.exports=Vc(KF);var zF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:yn,n:gn,Gx:uF,Gy:bF,a:Js,d:Ks,h:Xc}=zF,St=32,Yc=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Xx=(x="")=>{let A=new Error(x);throw Yc(A,Xx),A},Qc=x=>typeof x=="bigint",Zc=x=>typeof x=="string",xC=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Ie=(x,A,r="")=>{let e=xC(x),t=x?.length,a=A!==void 0;if(!e||a&&t!==A){let s=r&&`"${r}" `,l=a?` of length ${A}`:"",B=e?`length=${t}`:`type=${typeof x}`,D=s+"expected Uint8Array"+l+", got "+B;throw e?new RangeError(D):new TypeError(D)}return x},On=x=>new Uint8Array(x),mi=x=>Uint8Array.from(x),VF=(x,A)=>x.toString(16).padStart(A,"0"),WF=x=>Array.from(Ie(x)).map(A=>VF(A,2)).join(""),$r={_0:48,_9:57,A:65,F:70,a:97,f:102},pF=x=>{if(x>=$r._0&&x<=$r._9)return x-$r._0;if(x>=$r.A&&x<=$r.F)return x-($r.A-10);if(x>=$r.a&&x<=$r.f)return x-($r.a-10)},XF=x=>{let A="hex invalid";if(!Zc(x))return Xx(A);let r=x.length,e=r/2;if(r%2)return Xx(A);let t=On(e);for(let a=0,s=0;a<e;a++,s+=2){let l=pF(x.charCodeAt(s)),B=pF(x.charCodeAt(s+1));if(l===void 0||B===void 0)return Xx(A);t[a]=l*16+B}return t},YF=()=>globalThis?.crypto,AC=()=>YF()?.subtle??Xx("crypto.subtle must be defined, consider polyfill"),QF=(...x)=>{let A=0;for(let t of x)A+=Ie(t).length;let r=On(A),e=0;return x.forEach(t=>{r.set(t,e),e+=t.length}),r},rC=(x=St)=>YF().getRandomValues(On(x)),_n=BigInt,Se=(x,A,r,e="bad number: out of range")=>{if(!Qc(x))throw new TypeError(e);if(A<=x&&x<r)return x;throw new RangeError(e)},px=(x,A=yn)=>{let r=x%A;return r>=0n?r:A+r},jF=(1n<<255n)-1n,m0=x=>{x<0n&&Xx("negative coordinate");let A=(x>>255n)*19n+(x&jF);return A=(A>>255n)*19n+(A&jF),A%yn},eC=x=>px(x,gn),tC=(x,A)=>{(x===0n||A<=0n)&&Xx("no inverse n="+x+" mod="+A);let r=px(x,A),e=A,t=0n,a=1n,s=1n,l=0n;for(;r!==0n;){let B=e/r,D=e%r,p=t-s*B,j=a-l*B;e=r,r=D,t=s,a=l,s=p,l=j}return e===1n?px(t,A):Xx("no inverse")},nC=x=>{let A=BC[x];return typeof A!="function"&&Xx("hashes."+x+" not set"),A},sC=x=>Ie(x,64,"digest"),zs=x=>x instanceof It?x:Xx("Point expected"),si=2n**256n,hi=class qe{constructor(A,r,e,t){s0(this,"X"),s0(this,"Y"),s0(this,"Z"),s0(this,"T");let a=si;this.X=Se(A,0n,a),this.Y=Se(r,0n,a),this.Z=Se(e,1n,a),this.T=Se(t,0n,a),Object.freeze(this)}static CURVE(){return zF}static fromAffine(A){return new qe(A.x,A.y,1n,m0(A.x*A.y))}static fromBytes(A,r=!1){let e=Ks,t=mi(Ie(A,St)),a=A[31];t[31]=a&-129;let s=ZF(t);Se(s,0n,r?si:yn);let B=m0(s*s),D=px(B-1n),p=m0(e*B+1n),{isValid:j,value:g}=oC(D,p);j||Xx("bad point: y not sqrt");let q=(g&1n)===1n,S=(a&128)!==0;return!r&&g===0n&&S&&Xx("bad point: x==0, isLastByteOdd"),S!==q&&(g=px(-g)),new qe(g,s,1n,m0(g*s))}static fromHex(A,r){return qe.fromBytes(XF(A),r)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Js,r=Ks,e=this;if(e.is0())return Xx("bad point: ZERO");let{X:t,Y:a,Z:s,T:l}=e,B=m0(t*t),D=m0(a*a),p=m0(s*s),j=m0(p*p),g=m0(B*A),q=m0(p*(g+D)),S=px(j+m0(r*m0(B*D)));if(q!==S)return Xx("bad point: equation left != right (1)");let P=m0(t*a),T=m0(s*l);return P!==T?Xx("bad point: equation left != right (2)"):this}equals(A){let{X:r,Y:e,Z:t}=this,{X:a,Y:s,Z:l}=zs(A),B=m0(r*l),D=m0(a*t),p=m0(e*l),j=m0(s*t);return B===D&&p===j}is0(){return this.equals($e)}negate(){return new qe(px(-this.X),this.Y,this.Z,px(-this.T))}double(){let{X:A,Y:r,Z:e}=this,t=Js,a=m0(A*A),s=m0(r*r),l=m0(2n*e*e),B=m0(t*a),D=px(A+r),p=px(m0(D*D)-a-s),j=px(B+s),g=px(j-l),q=px(B-s),S=m0(p*g),P=m0(j*q),T=m0(p*q),M=m0(g*j);return new qe(S,P,M,T)}add(A){let{X:r,Y:e,Z:t,T:a}=this,{X:s,Y:l,Z:B,T:D}=zs(A),p=Js,j=Ks,g=m0(r*s),q=m0(e*l),S=m0(m0(a*j)*D),P=m0(t*B),T=px(m0(px(r+e)*px(s+l))-g-q),M=px(P-S),N=px(P+S),z=px(q-m0(p*g)),v0=m0(T*M),L=m0(N*z),k=m0(T*z),O=m0(M*N);return new qe(v0,L,O,k)}subtract(A){return this.add(zs(A).negate())}multiply(A,r=!0){if(!r&&A===0n||(Se(A,1n,gn),!r&&this.is0()))return $e;if(A===1n)return this;if(this.equals(nt))return uC(A).p;let e=$e,t=nt;for(let a=this;A>0n;a=a.double(),A>>=1n)A&1n?e=e.add(a):r&&(t=t.add(a));return e}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:r,Z:e}=this;if(this.equals($e))return{x:0n,y:1n};let t=tC(e,yn);m0(e*t)!==1n&&Xx("invalid inverse");let a=m0(A*t),s=m0(r*t);return{x:a,y:s}}toBytes(){let{x:A,y:r}=this.toAffine(),e=iC(r);return e[31]|=A&1n?128:0,e}toHex(){return WF(this.toBytes())}clearCofactor(){return this.multiply(_n(Xc),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(gn/2n,!1).double();return gn%2n&&(A=A.add(this)),A.is0()}};s0(hi,"BASE");s0(hi,"ZERO");var It=hi,nt=new It(uF,bF,1n,px(uF*bF)),$e=new It(0n,1n,1n,0n);It.BASE=nt;It.ZERO=$e;var iC=x=>XF(VF(Se(x,0n,si),64)).reverse(),ZF=x=>_n("0x"+WF(mi(Ie(x)).reverse())),Cr=(x,A)=>{let r=x;for(;A-- >0n;)r=m0(r*r);return r},aC=x=>{let A=m0(x*x),r=m0(A*x),e=m0(Cr(r,2n)*r),t=m0(Cr(e,1n)*x),a=m0(Cr(t,5n)*t),s=m0(Cr(a,10n)*a),l=m0(Cr(s,20n)*s),B=m0(Cr(l,40n)*l),D=m0(Cr(B,80n)*B),p=m0(Cr(D,80n)*B),j=m0(Cr(p,10n)*a);return{pow_p_5_8:m0(Cr(j,2n)*x),b2:r}},mF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,oC=(x,A)=>{let r=m0(A*m0(A*A)),e=m0(m0(r*r)*A),t=aC(m0(x*e)).pow_p_5_8,a=m0(x*m0(r*t)),s=m0(A*m0(a*a)),l=a,B=m0(a*mF),D=s===x,p=s===px(-x),j=s===px(-x*mF);return D&&(a=l),(p||j)&&(a=B),(px(a)&1n)===1n&&(a=px(-a)),{isValid:D||p,value:a}},FC=x=>eC(ZF(x)),vC=(...x)=>Promise.resolve(nC("sha512Async")(QF(...x))).then(sC),fC=x=>{let A=mi(x),r=A.slice(0,32);r[0]&=248,r[31]&=127,r[31]|=64;let e=A.slice(32,64),t=FC(r),a=nt.multiply(t),s=a.toBytes();return{head:r,prefix:e,scalar:t,point:a,pointBytes:s}},lC=x=>vC(Ie(x,St)).then(fC),EC=x=>lC(x).then(A=>A.pointBytes),BC={sha512Async:async x=>{let A=AC(),r=QF(x);return On(await A.digest("SHA-512",r.buffer))},sha512:void 0},cC=x=>(x=x===void 0?rC(St):x,Ie(x,St)),CC=async x=>{let A=cC(x),r=await EC(A);return{secretKey:A,publicKey:r}},wn=8,dC=256,x8=Math.ceil(dC/wn)+1,ii=2**(wn-1),DC=()=>{let x=[],A=nt,r=A;for(let e=0;e<x8;e++){r=A,x.push(r);for(let t=1;t<ii;t++)r=r.add(A),x.push(r);A=r.double()}return x},hF=void 0,gF=(x,A)=>{let r=A.negate();return x?r:A},uC=x=>{let A=hF||(hF=DC()),r=$e,e=nt,t=2**wn,a=t,s=_n(t-1),l=_n(wn);for(let B=0;B<x8;B++){let D=Number(x&s);x>>=l,D>ii&&(D-=a,x+=1n);let p=B*ii,j=p,g=p+Math.abs(D)-1,q=B%2!==0,S=D<0;D===0?e=e.add(gF(q,A[j])):r=r.add(gF(S,A[g]))}return x!==0n&&Xx("invalid wnaf"),{p:r,f:e}},A8=32,r8=64;async function ai(){let{secretKey:x,publicKey:A}=await CC(),r=new Uint8Array(r8);return r.set(x,0),r.set(A,A8),{publicKey:A,privateKey:r}}function Sn(x){let A="";for(let r of x)A+=String.fromCharCode(r);return btoa(A)}function oi(x,A="base64 value"){return t8(e8(x,A))}function e8(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function gi(x){return Sn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function bC(x,A="base64url value"){let r=(4-x.length%4)%4,e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(r);return t8(e8(e,A))}function t8(x){let A=new Uint8Array(x.length);for(let r=0;r<x.length;r++)A[r]=x.charCodeAt(r);return A}var qt=class extends Error{constructor(x,A,r){super(r),s0(this,"httpStatus",x),s0(this,"code",A),this.name="CertApiError"}},Fi="/api/1/companion/cert",n8=10080*60*1e3,kF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function s8(x,A){let r=x.apiHost.replace(/\/+$/,""),e=kF?Fi:r+Fi,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};kF&&r&&(t["x-target-host"]=r);let a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify({publicKey:gi(A.publicKey),subject:A.subject})});if(!a.ok){let l="unknown_error",B=a.statusText||`Cert API request failed (${a.status})`;try{let D=await a.json();D.code&&(l=D.code),D.message&&(B=D.message)}catch{}throw new qt(a.status,l,B)}let s=await a.json();if(!s.certificate||!s.notAfter)throw new qt(a.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:s.certificate,notAfter:s.notAfter}}function ki(x,A=n8){let r=Date.parse(x);return Number.isFinite(r)?r-Date.now()>A:!1}var pC=require("events"),jC=zc(Wc(),1),bn="[device-master]",Dr={debug:(x,...A)=>console.debug(bn,x,...A),info:(x,...A)=>console.info(bn,x,...A),warn:(x,...A)=>console.warn(bn,x,...A),error:(x,...A)=>console.error(bn,x,...A)},qn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},mC=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function yi(x,A=0){let r=~~A^-1;for(let e=0;e<x.length;e++)r=r>>>8^mC[(r^x[e])&255];return(r^-1)>>>0}var vi=Date.UTC(1999,11,31,0,0,0);function fi(x,A,r=" "){let e=""+x,t=Math.max(0,Math.abs(A)-e.length),a=r.repeat(t);return A<0?e+a:a+e}function ee(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function li(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var hC=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),gC=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function kC(x){let A=x.length,r=255,e=255;for(let t=0;t<A;t++){let a=(e^x[t])&255;e=(r^hC[a])&255,r=gC[a]}return 256*r|e}function yC(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),r=new DataView(A),e=x.substring(8,16),t=x.substring(0,8),a=parseInt(e,16),s=parseInt(t,16);return r.setUint32(0,a,!0),r.setUint32(4,s,!0),r}function _C(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),r=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),e=`${A}${r}`.toUpperCase();return e.startsWith("0000")||r.startsWith("0000")?null:e}var wC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],SC=new Map(wC.map((x,A)=>[x,128+A]));function qC(x){return x<=127||x>=160&&x<=255?x:SC.get(x)??63}var et="uto_script.dat",_i="uto_fw.dat",i8=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(i8||{}),a8=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(a8||{}),wi=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(wi||{}),o8=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(o8||{}),F8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(F8||{}),v8=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(v8||{}),f8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(f8||{}),l8=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(l8||{}),E8=97;function Tn(x){return x&E8}var B8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(B8||{}),c8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(c8||{}),yF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},TC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+ee(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+ee(x,2)}tagToString(x){x|=0;let A=Object.entries(wi).find(([,r])=>r===x);return A?"TAG_"+A[0]:"TAG_0x"+ee(x,4)}containerIdToTag(x,A){let r=yF[x]||null;return r&&A&&x.startsWith("histdata")?26623:r}containerIdOf(x){let A=Object.entries(yF).find(([,r])=>r===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let r=x.data.getUint8(0);return r===32?"alerts":r>=0&&r<=9?`histdata${r}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},r=!!(x&A.WAKEUPABLE),e=[];x&A.POSUPDATE_ACTIVE?e=["locating",!1]:x&A.RETRY?e=["retry",!1]:x&A.STARTED?e=["dialing",!1]:x&A.ACTIVE?e=["active",!1]:x&A.FAILED?e=["failed",r]:x&A.DISABLED?e=["disabled",!1]:e=["offline",r];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:e[0],wakeupAble:e[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),r=x&255;return Math.round(A*1e3+1e3*r/256)+vi}msToStamp40(x){let A=(x-vi)/1e3,r=Math.trunc(A),e=Math.round((A-r)*256);return r*256+e}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,r){let e=new TextDecoder("utf-8"),t=0;for(;t<r&&x.getUint8(A+t);)t++;let a=new Uint8Array(x.buffer,A,t);return e.decode(a)}ansiUnpack(x,A,r,e){try{let t=li(x),a=new TextDecoder(e),s=0;for(;s<r&&t[A+s];)s++;return a.decode(t.slice(A,A+s))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${e}"`}}cp1252Unpack(x,A,r){return this.ansiUnpack(x,A,r,"cp1252")}ansiPack(x,A,r,e){let t=li(x);t.fill(0,A,A+r);for(let a=0;a<r&&a<e.length;a++)t[A+a]=qC(e.charCodeAt(a))}cp1252Pack(x,A,r,e){return this.ansiPack(x,A,r,e)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,r=A.getUint16(0),e=A.getUint16(2),t=A.getUint16(4),a=A.getUint32(6),s=(ee(a,8)+ee(x.dwDevSN,8)).toUpperCase(),l=[];for(let B=0;B<(A.byteLength-10)/5;B++){let D=A.getUint8(10+B*5+2),p=A.getUint16(10+B*5);l.push({wTag:p,sTag:this.tagToString(p),size:A.getUint16(10+B*5+3),flags:{historic:!!(D&1),single:!(D&1),up:!!(D&2),down:!!(D&4),variableLength:!!(D&8),setValue:!!(D&16)}})}return{serialNumber:s,class:ee(r,4),firmwareVersion:`${fi(t>>8,2)}v${fi(t&255,3,"0")}`,flags:ee(e,4),utos:l}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,r={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let e=0;e<(A.byteLength-8)/5;e++)r.stamps.push(A.getUint32(8+e*5+0)*256+A.getUint8(8+e*5+4));return r}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),r=new DataView(A.buffer);return r.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(r,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,r=A.getUint16(13,!1),e={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(r&1),write:!!(r&2),node:!!(r&4),system:!!(r&8),extra:r&-16},_flags:r,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(e.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+e.flags.extra);return e}encode_FILEMAP(x){if(x.flags){let e=0;x.flags.extra&&(e|=x.flags.extra|0),x.flags.read&&(e|=1),x.flags.write&&(e|=2),x.flags.node&&(e|=4),x.flags.system&&(e|=8),x._flags=e}let A=new Uint8Array(15+x.name.length+1),r=new DataView(A.buffer);return r.setUint32(0,Math.trunc(x.stamp/256),!1),r.setUint8(4,x.stamp&255),r.setUint32(5,x.size,!1),r.setUint32(9,x.crc32,!1),r.setUint16(13,x._flags,!1),this.cp1252Pack(r,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},ex=new TC,Mt={nowMs:()=>Date.now()},Si=class{constructor(x="(unnamed)"){s0(this,"name"),s0(this,"_locked"),s0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},_F=new WeakMap;function C8(x,A){let e=(_F.get(x)??Promise.resolve()).then(()=>$C(x,A));return _F.set(x,e.catch(()=>{})),e}async function $C(x,A){x.interface&&x.interface==="ble"?await PC(async r=>{await x.write(r)},A,x.mtuSize??23):await x.write(A)}async function PC(x,A,r=23){let e=new Uint8Array(A),t=r-3;for(let a=0;a<e.byteLength;a+=t){let s=e.slice(a,a+t);await x(s.buffer)}}var wF=15e3,NC=500,IC=3,MC=1024;function SF(x){return x?.utos.find(r=>r.wTag===3)?.size||MC}var d8=class kn extends pC.EventEmitter{constructor(A,r,e=Mt){super(),s0(this,"mdnComInterface"),s0(this,"receiveUto"),s0(this,"sendUto"),s0(this,"rxUto"),s0(this,"txStream"),s0(this,"SendUtoCmdExt"),s0(this,"utoPortLock"),s0(this,"transport"),s0(this,"logger"),s0(this,"ecsHandshakeResolver",null),s0(this,"disposeTransportListener",null),s0(this,"encrypted",!1),s0(this,"lastTxWrite",Promise.resolve()),s0(this,"timeSource"),s0(this,"fileChunkSize",SF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new Si("UTO-Port"),this.transport=A,this.logger=r??Dr,this.timeSource=e}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,jC.default)({print:a=>{this.logger.info(`[mdnCom] ${a}`),this.emit("mdnCom",a)},printErr:a=>{this.logger.error(`[mdnCom] ${a}`),this.emit("mdnComError",a)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let r=this.mdnComInterface.addFunction(()=>{if(this.txStream){let a=this.txStream();this.lastTxWrite=C8(this.transport,a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength))}},"v"),e=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let a=this.rxUto(),s=this.parseUtoFrame(a);this.emit("utoFrame",s)}},"v");await A(r,e);let t=this.mdnComInterface.addFunction(a=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${a} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let s=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,s({success:a===0,resultCode:a})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async a=>{this.receiveUto&&await this.receiveUto(new Uint8Array(a))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let r=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(r.message),r}try{this.logger.info("[dispose] requesting context for encrypted close");let r=await this.requestContext();r?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(r)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(r){this.logger.error(`[dispose] error during context round trip: ${r}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(r){this.logger.error(`[dispose] error sending connection close: ${r}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(r){this.logger.error(`[dispose] error resetting WASM ECS state: ${r}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:ex.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,r=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let e=Math.trunc(r/256),t=r&255;return await this.sendWithRetry((a,s,l)=>{if(a.bCmd===0){let B=this.resultVerdict(a);B===5||B===0||B===4?s(null):l(a);return}if(a.wTagFull!==A)return l(a);s(a)},async()=>{this.sendUto(A,{u32SysTime:e,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:r,disc:e}=kn.resultCode(A);return e&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),r}static concatChunks(A){let r=A.reduce((a,s)=>a+s.length,0),e=new Uint8Array(r),t=0;for(let a of A)e.set(a,t),t+=a.length;return e}sendWithRetry(A,r,e){let t=e?.timeoutMs??NC,a=e?.maxRetries??IC;return new Promise((s,l)=>{let B=0,D=!1,p=()=>{},j,g={resolve:S=>{D=!0,clearTimeout(j),this.removeListener("utoFrame",p),s(S)},reject:S=>{D=!0,clearTimeout(j),this.removeListener("utoFrame",p),l(S)}},q=async()=>{p=S=>A(S,g.resolve,g.reject),this.once("utoFrame",p);try{await r()}catch(S){if(D)return;this.removeListener("utoFrame",p),l(S);return}D||(j=setTimeout(()=>{if(this.removeListener("utoFrame",p),B>=a){l(new Error(e?.timeoutMessage??`[UtoMaster] no response from device after ${a} retries`));return}B++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${B}/${a})`),q()},t))};q()})}createFrameIdleGuard(A,r,e){let t,a=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{a(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),e()},r)},clear:a}}async requestHistoricUtos(A,r,e,t=wF,a=0,s){return await this.utoPortLock.requestLock(),new Promise((l,B)=>{if(!this.sendUto)return l([]);let D=[],p=0,j=Promise.resolve(),g=T=>{if(q.arm(),T.bCmd===0){q.clear(),this.settleHistoricTransfer(T,D,s,j,l,B);return}if(T.wTagFull===A&&T.data&&(D.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),e?.(++p),s&&a>0&&D.length>=a)){let M=D.splice(0);j=j.then(()=>s(M))}this.once("utoFrame",g)},q=this.createFrameIdleGuard(g,t,()=>B(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${p} records received)`)));this.once("utoFrame",g),q.arm();let S=Math.trunc(r/256),P=r&255;this.sendUto(A,{u32SysTime:S,u8SysTime:P})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,r,e,t,a,s){let l=this.resultVerdict(A);if(!(l===5||l===0||l===4)){t.then(()=>s(A)).catch(s);return}let D=e&&r.length>0?r.splice(0):null;(D?t.then(()=>e(D)):t).then(()=>a(e?[]:r)).catch(s)}async requestFile(A,r,e=wF){return await this.utoPortLock.requestLock(),new Promise((t,a)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let s=[],l=0,B=j=>{if(D.arm(),j.bCmd===0){D.clear();let g=this.resultVerdict(j);g===5||g===0?t(kn.concatChunks(s)):a(j);return}if(j.bCmd===3&&j.data){let g=this.copyDataView(j.data);s.push(g),l+=g.byteLength,r?.(l)}this.once("utoFrame",B)},D=this.createFrameIdleGuard(B,e,()=>a(new Error(`[UtoMaster] requestFile timed out after ${e}ms (file="${A}", ${l} bytes received)`)));this.once("utoFrame",B),D.arm();let p=new Uint8Array(A.length+1);for(let j=0;j<A.length;j++)p[j]=A.charCodeAt(j)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},p)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let r=new Uint8Array(A.length+1);for(let e=0;e<A.length;e++)r[e]=A.charCodeAt(e)&255;await this.sendUTOCmdExt(10,3,r,0)}async sendSetValue(A,r,e){this.isInitialized();let t=new Uint8Array(r.length);ex.cp1252Pack(t,0,r.length,r);try{return await this.sendUTOCmdExt(11,A,t,e),{outcome:"ok",resultCode:0}}catch(a){let s=a;if(s&&s.bCmd===0&&typeof s.wTagFull=="number"){let{verdict:l}=kn.resultCode(s),B=s.wTagFull;return l===4?{outcome:"stamp",resultCode:B}:l===7||l===9?{outcome:"denied",resultCode:B}:{outcome:"error",resultCode:B}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${a}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),r=A?ex.decode_DEVINFO(A):null;return r&&(this.fileChunkSize=SF(r)),r}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?ex.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,ex.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((r,e)=>{if(!this.SendUtoCmdExt)return r({});let t={},a=s=>this.handleFileListFrame(s,t,A,r,e,a);this.once("utoFrame",a),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,r,e,t,a,s){if(A.bCmd===0){let l=this.resultVerdict(A);l===5||l===0?t(e?r[e]?{[e]:r[e]}:{}:r):a(A);return}try{let l=ex.decode_FILEMAP(A);r[l.name]=l}catch(l){a(l);return}this.once("utoFrame",s)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?ex.decode_STAMPS(A):null}async sendFile(A,r,e,t){let a=r;A===2&&(a=new Uint8Array(r.length+1),a.set(new Uint8Array(r),1),a[0]=A);let s={name:t??et,stamp:e===0?0:ex.msToStamp40(e??this.timeSource.nowMs()),size:a.length,_flags:11,crc32:yi(a)},l=ex.encode_FILEMAP(s);if(!await this.sendUTOCmdExt(9,3,l,0)){let D=this.fileChunkSize;for(let p=0;p<a.length;p+=D){let j=Math.min(D,a.byteLength-p),g=new Uint8Array(a.buffer,a.byteOffset+p,j);await this.sendUTOCmdExt(3,3,g,p*256);let S=(p+j)/a.byteLength*100;this.emit("installing",S.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,r,e,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let a=t??this.utoStampNow40,s=Math.trunc(a/256),l=a&255;return await this.sendWithRetry((B,D,p)=>{if(B.bCmd!==0){p(B);return}this.resultVerdict(B)===0?D(null):p(B)},async()=>{this.SendUtoCmdExt(A,r,{u32SysTime:s,u8SysTime:l},e),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${r.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,r,e){return this.sendUTOCmdExt(3,A,r,e)}packOtpFlashString(A){let r=new Uint8Array(1024);return ex.cp1252Pack(r,0,1024,A),r}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let r=A.companionPublicKey.slice(0,32),e=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${r.length} seed.len=${e.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(r,e);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((a,s)=>{if(A.signal?.aborted){s(new Error("Operation aborted"));return}let l=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),s(new Error("Operation aborted")))};A.signal?.addEventListener("abort",l,{once:!0}),this.ecsHandshakeResolver=D=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(D)}`),A.signal?.removeEventListener("abort",l),D.success&&(this.encrypted=!0),a(D)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let B=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${B} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),B<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",l),a({success:!1,resultCode:B})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},LC=require("events"),D8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(D8||{}),RC=5e3,OC=5e3,GC=class extends LC.EventEmitter{constructor(x,A){super(),s0(this,"atHandler"),s0(this,"debugCache",null),s0(this,"logger"),s0(this,"dataHandler"),this.atHandler=x,this.logger=A??Dr,this.dataHandler=r=>{this.processIncomingDebugData(r)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[r,e,,t]=A.split(" "),a={sequenceId:r?.substring(1),lineNumber:Number.isNaN(e)?void 0:Number(e),message:"",level:3},s=`${t.substring(1)}`,l=t.substring(0,1);"$!?~$".includes(l)&&(a.level=this.logLevelFromPrefix(l)),a.message=s,this.emitMessageEvent(a)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:r,f11:e},t){for(let a of t){a==="\xFF"&&(a="%");let s=String.fromCharCode(...e.map(l=>l.tag));if(a===""){switch(s){case"":break;case"":case"":e.pop();break;case"":break;case"":e.shift();break;default:}e.push({tag:1,buf:a,start:Date.now()})}else if(a===""){switch(s){case"":case"":break;case"":case"":continue;case"":e.pop();break;default:}let l=e.pop().buf+a;l==="****^reset****"?r=0:this.process_x01(l,r)}else if(a===""){switch(s){case"":break;case"":case"":e.pop();break;case"":break;case"":e.shift();break;default:}e.push({tag:16,buf:a,start:Date.now()})}else if(e.length){let l=e[e.length-1];if(l.tag===16&&a==="\r")continue;l.buf+=a,l.tag===16&&a===`
|
|
2628
|
-
`&&e.pop()}else{if(x||(A=Date.now()),a==="\r"||(x+=a,!(Date.now()>A+
|
|
2627
|
+
}`;var ax=new Function(Object.keys(i0),w0)(...Object.values(i0)),tx=`methodCaller<(${r0.map(Ex=>Ex.name)}) => ${G.name}>`;return w(ir(tx,ax))},c0=C=>(C=D0(C),k0.toHandle(s[C])),I0=(C,u)=>(C=k0.toValue(C),u=k0.toValue(u),k0.toHandle(C[u])),Z0=C=>{C>9&&(Y[C+1]+=1)},fx=(C,u,y,L,G)=>m[C](u,y,L,G),dx=C=>k0.toHandle(D0(C)),qx=C=>{var u=k0.toValue(C);BA(u),l0(C)},Rx=()=>2147483648,Tx=(C,u)=>(k(u,"alignment argument is required"),Math.ceil(C/u)*u),lx=C=>{var u=zt.buffer.byteLength,y=(C-u+65535)/65536|0;try{return zt.grow(y),cx(),1}catch(L){z(`growMemory: Attempted to grow heap from ${u} bytes to ${C} bytes, but got error: ${L}`)}},$x=C=>{var u=Fx.length;C>>>=0,k(C>u);var y=Rx();if(C>y)return z(`Cannot enlarge memory, requested ${C} bytes, but the limit is ${y} bytes!`),!1;for(var L=1;L<=4;L*=2){var G=u*(1+.2/L);G=Math.min(G,C+100663296);var r0=Math.min(y,Tx(Math.max(C,G),65536)),A0=lx(r0);if(A0)return!0}return z(`Failed to grow the heap from ${u} bytes to ${r0} bytes, not enough memory!`),!1},Of=C=>{U0("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Gf=9007199254740992,Uf=-9007199254740992,Hf=C=>C<Uf||C>Gf?NaN:Number(C);function Kf(C,u,y,L){return u=Hf(u),70}var is=[null,[],[]],as=(C,u)=>{var y=is[C];k(y),u===0||u===10?((C===1?N:z)(be(y)),y.length=0):y.push(u)},np=()=>{ya(0),is[1].length&&as(1,10),is[2].length&&as(2,10)},Jf=(C,u,y,L)=>{for(var G=0,r0=0;r0<y;r0++){var A0=$0[u>>2],t0=$0[u+4>>2];u+=8;for(var i0=0;i0<t0;i0++)as(C,Fx[A0+i0]);G+=t0}return $0[L>>2]=G,0},zf=()=>{if(D){var C=require("crypto");return u=>C.randomFillSync(u)}return u=>(crypto.getRandomValues(u),0)},ma=C=>(ma=zf())(C),Vf=(C,u)=>ma(Fx.subarray(C,C+u)),Wf=(C,u)=>{if(je)for(var y=C;y<C+u;y++){var L=jr(y);L&&je.set(L,y)}},je,Xf=C=>(je||(je=new WeakMap,Wf(0,me.length)),je.get(C)||0),os=[],Yf=()=>{if(os.length)return os.pop();try{return me.grow(1)}catch(C){if(!(C instanceof RangeError))throw C;U0("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Fs=(C,u)=>{me.set(C,u),GA[C]=me.get(C)},ha=C=>{let u=C.length;return k(u<16384),[u%128|128,u>>7,...C]},Qf={i:127,p:127,j:126,f:125,d:124,e:111},ga=C=>ha(Array.from(C,u=>{var y=Qf[u];return k(y,`invalid signature char: ${u}`),y})),Zf=(C,u)=>{var y=Uint8Array.of(0,97,115,109,1,0,0,0,1,...ha([1,96,...ga(u.slice(1)),...ga(u[0]==="v"?"":u[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),L=new WebAssembly.Module(y),G=new WebAssembly.Instance(L,{e:{f:C}}),r0=G.exports.f;return r0},xl=(C,u)=>{k(typeof C<"u");var y=Xf(C);if(y)return y;var L=Yf();try{Fs(L,C)}catch(r0){if(!(r0 instanceof TypeError))throw r0;k(typeof u<"u","Missing signature argument to addFunction: "+C);var G=Zf(C,u);Fs(L,G)}return je.set(C,L),L},Al=C=>{je.delete(jr(C)),Fs(C,null),os.push(C)};Ur(),Vr(),k(Y.length===10);{if(s.noExitRuntime&&(xr=s.noExitRuntime),s.print&&(N=s.print),s.printErr&&(z=s.printErr),s.wasmBinary&&(v0=s.wasmBinary),s.FS_createDataFile=sx.createDataFile,s.FS_createPreloadedFile=sx.createPreloadedFile,tl(),s.arguments&&(j=s.arguments),s.thisProgram&&(g=s.thisProgram),k(typeof s.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof s.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof s.read>"u","Module.read option was removed"),k(typeof s.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof s.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof s.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof s.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof s.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof s.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof s.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof s.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.shift()();e0("preInit")}s.addFunction=xl,s.removeFunction=Al;var rl=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];rl.forEach(F0);var el=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];el.forEach(E0);function tl(){f0("fetchSettings"),f0("logReadFiles"),f0("loadSplitModule"),f0("onMalloc"),f0("onRealloc"),f0("onFree"),f0("onSbrkGrow")}var ka=x0("___getTypeName"),vs=x0("_malloc"),gr=x0("_free"),nl=s._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),sl=s._MdnCom_Free=x0("_MdnCom_Free"),il=s._MdnCom_RawRx=x0("_MdnCom_RawRx"),al=s._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),ol=s._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),Fl=s._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),vl=s._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),fl=s._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),ll=s._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),El=s._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),Bl=s._MdnCom_Init=x0("_MdnCom_Init"),cl=s._SendUtoQuery=x0("_SendUtoQuery"),Cl=s._SendUtoCmdExt=x0("_SendUtoCmdExt"),ya=x0("_fflush"),fs=x0("_emscripten_stack_get_end"),dl=x0("_emscripten_stack_get_base"),Dl=x0("_strerror"),_a=x0("_emscripten_stack_init"),ul=x0("_emscripten_stack_get_free"),pl=x0("__emscripten_stack_restore"),bl=x0("__emscripten_stack_alloc"),jl=x0("_emscripten_stack_get_current"),ml=x0("memory"),hl=x0("__indirect_function_table"),zt=x0("wasmMemory"),me=x0("wasmTable");function gl(C){k(typeof C.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof C.malloc<"u","missing Wasm export: malloc"),k(typeof C.free<"u","missing Wasm export: free"),k(typeof C.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof C.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof C.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof C.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof C.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof C.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof C.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof C.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof C.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof C.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof C.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof C.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof C.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof C.fflush<"u","missing Wasm export: fflush"),k(typeof C.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof C.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof C.strerror<"u","missing Wasm export: strerror"),k(typeof C.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof C.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof C._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof C._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof C.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof C.memory<"u","missing Wasm export: memory"),k(typeof C.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),ka=V0("__getTypeName",1),vs=V0("malloc",1),gr=V0("free",1),nl=s._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),sl=s._MdnCom_Free=V0("MdnCom_Free",1),il=s._MdnCom_RawRx=V0("MdnCom_RawRx",1),al=s._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),ol=s._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Fl=s._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),vl=s._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),fl=s._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),ll=s._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),El=s._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),Bl=s._MdnCom_Init=V0("MdnCom_Init",2),cl=s._SendUtoQuery=V0("SendUtoQuery",2),Cl=s._SendUtoCmdExt=V0("SendUtoCmdExt",4),ya=V0("fflush",1),fs=C.emscripten_stack_get_end,dl=C.emscripten_stack_get_base,Dl=V0("strerror",1),_a=C.emscripten_stack_init,ul=C.emscripten_stack_get_free,pl=C._emscripten_stack_restore,bl=C._emscripten_stack_alloc,jl=C.emscripten_stack_get_current,ml=zt=C.memory,hl=me=C.__indirect_function_table}var wa={__cxa_throw:EA,_abort_js:Fe,_embind_finalize_value_object:rr,_embind_register_bigint:ve,_embind_register_bool:i,_embind_register_class:mr,_embind_register_class_constructor:h,_embind_register_class_property:$,_embind_register_emval:H0,_embind_register_float:q0,_embind_register_function:gx,_embind_register_integer:Lx,_embind_register_memory_view:Jx,_embind_register_std_string:vt,_embind_register_std_wstring:o,_embind_register_value_object:v,_embind_register_value_object_field:B,_embind_register_void:d,_emval_create_invoker:B0,_emval_decref:l0,_emval_get_module_property:c0,_emval_get_property:I0,_emval_incref:Z0,_emval_invoke:fx,_emval_new_cstring:dx,_emval_run_destructors:qx,emscripten_resize_heap:$x,fd_close:Of,fd_seek:Kf,fd_write:Jf,random_get:Vf},Sa;function kl(){_a(),V()}function yl(){kl(),eA();function C(){k(!Sa),Sa=!0,s.calledRun=!0,!R&&(NA(),b0?.(s),s.onRuntimeInitialized?.(),e0("onRuntimeInitialized"),k(!s._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),Ux())}s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),C()},1)):C(),X()}var Ue;Ue=await ae(),yl(),L0?a=s:a=new Promise((C,u)=>{b0=C,N0=u});for(let C of Object.keys(s))C in t||Object.defineProperty(t,C,{configurable:!0,get(){U0(`Access to module property ('${C}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return a}})();typeof x=="object"&&typeof A=="object"?(A.exports=r,A.exports.default=r):typeof define=="function"&&define.amd&&define([],()=>r)}}),A8={};BC(A8,{API_STAMP_UNBOUNDED:()=>$8,AT_COMMANDS:()=>Gx,AT_COMMAND_TIMEOUT_MS:()=>FA,ApiBadRequestError:()=>M0,ApiForbiddenError:()=>Jn,ApiMethodNotAllowedError:()=>Vi,ApiNotFoundError:()=>$A,AtCommandHandler:()=>GD,AtDeviceError:()=>zi,AtHandlerDisposedError:()=>sA,BACKFILL_PENDING_HEADER:()=>wv,BACKFILL_PENDING_VALUE:()=>Sv,BLE_CONFIGURATION:()=>Fu,BLE_SCAN_TIMEOUT_MS:()=>fu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>KD,COMPANION_CERT_PATH:()=>fi,COMPANION_PRIVATE_KEY_SIZE:()=>v8,COMPANION_PUBLIC_KEY_SIZE:()=>F8,CertApiError:()=>Tt,CompanionAuthErrorKind:()=>ov,CompanionAuthManager:()=>HD,CompanionCertError:()=>iv,DDE_FIELD_UNUSED_INDEX:()=>S8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>E8,DEFAULT_RECONNECT_OPTIONS:()=>dv,DLO_FILENAME:()=>et,DdeMapper:()=>mD,DdeUnknownAliasError:()=>Ni,DdeUnknownContainerError:()=>te,DdeUnknownFieldError:()=>Ki,DdeWriteForbiddenError:()=>Nt,DebugLogLevel:()=>y8,DebugMaster:()=>vd,DebugSync:()=>ev,DeviceManager:()=>au,DeviceState:()=>Cv,FW_FILENAME:()=>Si,LIC_API_BASE_URL:()=>Z8,LOCAL_API_LIFECYCLE_FLAGS:()=>Ne,LOCAL_API_SITE_MASK:()=>hi,LOCAL_API_SITE_MASTER_KEYS:()=>Gt,LegacySync:()=>Av,LocalDataManager:()=>lv,MANUFACTURER_CODE:()=>vu,MS_1999_12_31:()=>li,MemoryStorage:()=>ld,Mutex:()=>Ti,OfflineSyncManager:()=>TD,RAW_TERMINAL_PATTERN:()=>nv,RESPONSE_PATTERNS:()=>rx,Rm2mStateManager:()=>nu,SYNC_LOGIC_MASK:()=>j8,SyncManager:()=>RD,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>tv,USB_CONFIGURATION:()=>ou,UplinkMode:()=>h8,UtoCommand:()=>c8,UtoESC:()=>m8,UtoFileFlag:()=>p8,UtoFileFlagInt:()=>b8,UtoFileType:()=>D8,UtoFlag:()=>u8,UtoMaster:()=>k8,UtoResult:()=>C8,UtoSplitTag:()=>d8,UtoTag:()=>qi,WebSocketBridge:()=>Ji,applyBlueprintNames:()=>Y8,applyDecpl:()=>Hd,assertValidRequestStamps:()=>it,base64ToBytes:()=>vi,base64UrlToBytes:()=>HC,buildBlueprintNameMap:()=>bi,bytesToBase64:()=>Tn,bytesToBase64Url:()=>yi,checkDeviceCapabilities:()=>WD,computeDisplayValue:()=>fv,computeDisplayValues:()=>mi,consoleLogger:()=>Dr,convertToString:()=>Ei,crc16Modbus:()=>XC,crc32Ethernet:()=>wi,createDebugBufferState:()=>sv,createLocalApiHandler:()=>b7,createLocalApiSession:()=>Xi,createSiteInfoFromDde:()=>w7,dbStampToStamp40:()=>dr,decodeContainer:()=>Di,decodeFloatm16:()=>U8,decodeLifecycleFlags:()=>bv,decodeRm2mStateResponse:()=>cv,decodeUplinkState:()=>Ev,deriveDeviceLifecycleMirror:()=>jv,encodeContainer:()=>pi,encodeFloatm16:()=>H8,encodeLifecycleFlags:()=>Qi,encodeNulPaddedJson:()=>uv,encodeSerialNumber:()=>YC,extractBits:()=>In,formatApiStamp:()=>tt,generateCompanionKeypair:()=>Fi,getDeviceAssignment:()=>xv,isCertValid:()=>_i,isDevicePushableTag:()=>q8,isUnusedField:()=>Pr,isValidStamp:()=>Wi,mapLocalApiError:()=>Hv,nullLogger:()=>$n,parseApiStamp:()=>st,parseBlueprint:()=>gD,parseDde:()=>Rd,parseMetadataResponse:()=>Fv,parseNulPaddedJson:()=>Ot,parseRm2mStateParams:()=>Bv,parseSerialNumberFromDataView:()=>QC,parseValuesResponse:()=>vv,requestCompanionCert:()=>B8,resolveAuthErrorKind:()=>JD,resolveBlueprintNameMap:()=>Rt,resolveContainerTag:()=>Nn,resolveTagForContainer:()=>St,resolveTagInModel:()=>cd,routeLocalApiRequest:()=>Gv,spreadBits:()=>N8,stamp40ToDbHex:()=>TA,syncLogic:()=>Pn,systemTimeSource:()=>Lt,toHex:()=>ee,toUint8Array:()=>Bi,utoStack:()=>ex});Kv.exports=CC(A8);var r8=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:wn,n:yn,Gx:_F,Gy:wF,a:zs,d:Vs,h:DC}=r8,qt=32,uC=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Xx=(x="")=>{let A=new Error(x);throw uC(A,Xx),A},pC=x=>typeof x=="bigint",bC=x=>typeof x=="string",jC=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Ie=(x,A,r="")=>{let e=jC(x),t=x?.length,a=A!==void 0;if(!e||a&&t!==A){let s=r&&`"${r}" `,l=a?` of length ${A}`:"",E=e?`length=${t}`:`type=${typeof x}`,D=s+"expected Uint8Array"+l+", got "+E;throw e?new RangeError(D):new TypeError(D)}return x},Un=x=>new Uint8Array(x),gi=x=>Uint8Array.from(x),e8=(x,A)=>x.toString(16).padStart(A,"0"),t8=x=>Array.from(Ie(x)).map(A=>e8(A,2)).join(""),$r={_0:48,_9:57,A:65,F:70,a:97,f:102},SF=x=>{if(x>=$r._0&&x<=$r._9)return x-$r._0;if(x>=$r.A&&x<=$r.F)return x-($r.A-10);if(x>=$r.a&&x<=$r.f)return x-($r.a-10)},n8=x=>{let A="hex invalid";if(!bC(x))return Xx(A);let r=x.length,e=r/2;if(r%2)return Xx(A);let t=Un(e);for(let a=0,s=0;a<e;a++,s+=2){let l=SF(x.charCodeAt(s)),E=SF(x.charCodeAt(s+1));if(l===void 0||E===void 0)return Xx(A);t[a]=l*16+E}return t},s8=()=>globalThis?.crypto,mC=()=>s8()?.subtle??Xx("crypto.subtle must be defined, consider polyfill"),i8=(...x)=>{let A=0;for(let t of x)A+=Ie(t).length;let r=Un(A),e=0;return x.forEach(t=>{r.set(t,e),e+=t.length}),r},hC=(x=qt)=>s8().getRandomValues(Un(x)),Sn=BigInt,Se=(x,A,r,e="bad number: out of range")=>{if(!pC(x))throw new TypeError(e);if(A<=x&&x<r)return x;throw new RangeError(e)},bx=(x,A=wn)=>{let r=x%A;return r>=0n?r:A+r},qF=(1n<<255n)-1n,m0=x=>{x<0n&&Xx("negative coordinate");let A=(x>>255n)*19n+(x&qF);return A=(A>>255n)*19n+(A&qF),A%wn},gC=x=>bx(x,yn),kC=(x,A)=>{(x===0n||A<=0n)&&Xx("no inverse n="+x+" mod="+A);let r=bx(x,A),e=A,t=0n,a=1n,s=1n,l=0n;for(;r!==0n;){let E=e/r,D=e%r,b=t-s*E,j=a-l*E;e=r,r=D,t=s,a=l,s=b,l=j}return e===1n?bx(t,A):Xx("no inverse")},yC=x=>{let A=MC[x];return typeof A!="function"&&Xx("hashes."+x+" not set"),A},_C=x=>Ie(x,64,"digest"),Ws=x=>x instanceof Mt?x:Xx("Point expected"),ai=2n**256n,ki=class qe{constructor(A,r,e,t){s0(this,"X"),s0(this,"Y"),s0(this,"Z"),s0(this,"T");let a=ai;this.X=Se(A,0n,a),this.Y=Se(r,0n,a),this.Z=Se(e,1n,a),this.T=Se(t,0n,a),Object.freeze(this)}static CURVE(){return r8}static fromAffine(A){return new qe(A.x,A.y,1n,m0(A.x*A.y))}static fromBytes(A,r=!1){let e=Vs,t=gi(Ie(A,qt)),a=A[31];t[31]=a&-129;let s=a8(t);Se(s,0n,r?ai:wn);let E=m0(s*s),D=bx(E-1n),b=m0(e*E+1n),{isValid:j,value:g}=qC(D,b);j||Xx("bad point: y not sqrt");let q=(g&1n)===1n,S=(a&128)!==0;return!r&&g===0n&&S&&Xx("bad point: x==0, isLastByteOdd"),S!==q&&(g=bx(-g)),new qe(g,s,1n,m0(g*s))}static fromHex(A,r){return qe.fromBytes(n8(A),r)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=zs,r=Vs,e=this;if(e.is0())return Xx("bad point: ZERO");let{X:t,Y:a,Z:s,T:l}=e,E=m0(t*t),D=m0(a*a),b=m0(s*s),j=m0(b*b),g=m0(E*A),q=m0(b*(g+D)),S=bx(j+m0(r*m0(E*D)));if(q!==S)return Xx("bad point: equation left != right (1)");let P=m0(t*a),T=m0(s*l);return P!==T?Xx("bad point: equation left != right (2)"):this}equals(A){let{X:r,Y:e,Z:t}=this,{X:a,Y:s,Z:l}=Ws(A),E=m0(r*l),D=m0(a*t),b=m0(e*l),j=m0(s*t);return E===D&&b===j}is0(){return this.equals($e)}negate(){return new qe(bx(-this.X),this.Y,this.Z,bx(-this.T))}double(){let{X:A,Y:r,Z:e}=this,t=zs,a=m0(A*A),s=m0(r*r),l=m0(2n*e*e),E=m0(t*a),D=bx(A+r),b=bx(m0(D*D)-a-s),j=bx(E+s),g=bx(j-l),q=bx(E-s),S=m0(b*g),P=m0(j*q),T=m0(b*q),M=m0(g*j);return new qe(S,P,M,T)}add(A){let{X:r,Y:e,Z:t,T:a}=this,{X:s,Y:l,Z:E,T:D}=Ws(A),b=zs,j=Vs,g=m0(r*s),q=m0(e*l),S=m0(m0(a*j)*D),P=m0(t*E),T=bx(m0(bx(r+e)*bx(s+l))-g-q),M=bx(P-S),N=bx(P+S),z=bx(q-m0(b*g)),v0=m0(T*M),R=m0(N*z),k=m0(T*z),O=m0(M*N);return new qe(v0,R,O,k)}subtract(A){return this.add(Ws(A).negate())}multiply(A,r=!0){if(!r&&A===0n||(Se(A,1n,yn),!r&&this.is0()))return $e;if(A===1n)return this;if(this.equals(nt))return UC(A).p;let e=$e,t=nt;for(let a=this;A>0n;a=a.double(),A>>=1n)A&1n?e=e.add(a):r&&(t=t.add(a));return e}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:r,Z:e}=this;if(this.equals($e))return{x:0n,y:1n};let t=kC(e,wn);m0(e*t)!==1n&&Xx("invalid inverse");let a=m0(A*t),s=m0(r*t);return{x:a,y:s}}toBytes(){let{x:A,y:r}=this.toAffine(),e=wC(r);return e[31]|=A&1n?128:0,e}toHex(){return t8(this.toBytes())}clearCofactor(){return this.multiply(Sn(DC),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(yn/2n,!1).double();return yn%2n&&(A=A.add(this)),A.is0()}};s0(ki,"BASE");s0(ki,"ZERO");var Mt=ki,nt=new Mt(_F,wF,1n,bx(_F*wF)),$e=new Mt(0n,1n,1n,0n);Mt.BASE=nt;Mt.ZERO=$e;var wC=x=>n8(e8(Se(x,0n,ai),64)).reverse(),a8=x=>Sn("0x"+t8(gi(Ie(x)).reverse())),Cr=(x,A)=>{let r=x;for(;A-- >0n;)r=m0(r*r);return r},SC=x=>{let A=m0(x*x),r=m0(A*x),e=m0(Cr(r,2n)*r),t=m0(Cr(e,1n)*x),a=m0(Cr(t,5n)*t),s=m0(Cr(a,10n)*a),l=m0(Cr(s,20n)*s),E=m0(Cr(l,40n)*l),D=m0(Cr(E,80n)*E),b=m0(Cr(D,80n)*E),j=m0(Cr(b,10n)*a);return{pow_p_5_8:m0(Cr(j,2n)*x),b2:r}},TF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,qC=(x,A)=>{let r=m0(A*m0(A*A)),e=m0(m0(r*r)*A),t=SC(m0(x*e)).pow_p_5_8,a=m0(x*m0(r*t)),s=m0(A*m0(a*a)),l=a,E=m0(a*TF),D=s===x,b=s===bx(-x),j=s===bx(-x*TF);return D&&(a=l),(b||j)&&(a=E),(bx(a)&1n)===1n&&(a=bx(-a)),{isValid:D||b,value:a}},TC=x=>gC(a8(x)),$C=(...x)=>Promise.resolve(yC("sha512Async")(i8(...x))).then(_C),PC=x=>{let A=gi(x),r=A.slice(0,32);r[0]&=248,r[31]&=127,r[31]|=64;let e=A.slice(32,64),t=TC(r),a=nt.multiply(t),s=a.toBytes();return{head:r,prefix:e,scalar:t,point:a,pointBytes:s}},NC=x=>$C(Ie(x,qt)).then(PC),IC=x=>NC(x).then(A=>A.pointBytes),MC={sha512Async:async x=>{let A=mC(),r=i8(x);return Un(await A.digest("SHA-512",r.buffer))},sha512:void 0},LC=x=>(x=x===void 0?hC(qt):x,Ie(x,qt)),RC=async x=>{let A=LC(x),r=await IC(A);return{secretKey:A,publicKey:r}},qn=8,OC=256,o8=Math.ceil(OC/qn)+1,oi=2**(qn-1),GC=()=>{let x=[],A=nt,r=A;for(let e=0;e<o8;e++){r=A,x.push(r);for(let t=1;t<oi;t++)r=r.add(A),x.push(r);A=r.double()}return x},$F=void 0,PF=(x,A)=>{let r=A.negate();return x?r:A},UC=x=>{let A=$F||($F=GC()),r=$e,e=nt,t=2**qn,a=t,s=Sn(t-1),l=Sn(qn);for(let E=0;E<o8;E++){let D=Number(x&s);x>>=l,D>oi&&(D-=a,x+=1n);let b=E*oi,j=b,g=b+Math.abs(D)-1,q=E%2!==0,S=D<0;D===0?e=e.add(PF(q,A[j])):r=r.add(PF(S,A[g]))}return x!==0n&&Xx("invalid wnaf"),{p:r,f:e}},F8=32,v8=64;async function Fi(){let{secretKey:x,publicKey:A}=await RC(),r=new Uint8Array(v8);return r.set(x,0),r.set(A,F8),{publicKey:A,privateKey:r}}function Tn(x){let A="";for(let r of x)A+=String.fromCharCode(r);return btoa(A)}function vi(x,A="base64 value"){return l8(f8(x,A))}function f8(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function yi(x){return Tn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function HC(x,A="base64url value"){let r=(4-x.length%4)%4,e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(r);return l8(f8(e,A))}function l8(x){let A=new Uint8Array(x.length);for(let r=0;r<x.length;r++)A[r]=x.charCodeAt(r);return A}var Tt=class extends Error{constructor(x,A,r){super(r),s0(this,"httpStatus",x),s0(this,"code",A),this.name="CertApiError"}},fi="/api/1/companion/cert",E8=10080*60*1e3,NF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function B8(x,A){let r=x.apiHost.replace(/\/+$/,""),e=NF?fi:r+fi,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};NF&&r&&(t["x-target-host"]=r);let a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify({publicKey:yi(A.publicKey),subject:A.subject})});if(!a.ok){let l="unknown_error",E=a.statusText||`Cert API request failed (${a.status})`;try{let D=await a.json();D.code&&(l=D.code),D.message&&(E=D.message)}catch{}throw new Tt(a.status,l,E)}let s=await a.json();if(!s.certificate||!s.notAfter)throw new Tt(a.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:s.certificate,notAfter:s.notAfter}}function _i(x,A=E8){let r=Date.parse(x);return Number.isFinite(r)?r-Date.now()>A:!1}var KC=require("events"),JC=cC(dC(),1),jn="[device-master]",Dr={debug:(x,...A)=>console.debug(jn,x,...A),info:(x,...A)=>console.info(jn,x,...A),warn:(x,...A)=>console.warn(jn,x,...A),error:(x,...A)=>console.error(jn,x,...A)},$n={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},zC=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function wi(x,A=0){let r=~~A^-1;for(let e=0;e<x.length;e++)r=r>>>8^zC[(r^x[e])&255];return(r^-1)>>>0}var li=Date.UTC(1999,11,31,0,0,0);function Ei(x,A,r=" "){let e=""+x,t=Math.max(0,Math.abs(A)-e.length),a=r.repeat(t);return A<0?e+a:a+e}function ee(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Bi(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var VC=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),WC=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function XC(x){let A=x.length,r=255,e=255;for(let t=0;t<A;t++){let a=(e^x[t])&255;e=(r^VC[a])&255,r=WC[a]}return 256*r|e}function YC(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),r=new DataView(A),e=x.substring(8,16),t=x.substring(0,8),a=parseInt(e,16),s=parseInt(t,16);return r.setUint32(0,a,!0),r.setUint32(4,s,!0),r}function QC(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),r=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),e=`${A}${r}`.toUpperCase();return e.startsWith("0000")||r.startsWith("0000")?null:e}var ZC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],xd=new Map(ZC.map((x,A)=>[x,128+A]));function Ad(x){return x<=127||x>=160&&x<=255?x:xd.get(x)??63}var et="uto_script.dat",Si="uto_fw.dat",c8=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(c8||{}),C8=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(C8||{}),qi=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(qi||{}),d8=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(d8||{}),D8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(D8||{}),u8=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(u8||{}),p8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(p8||{}),b8=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(b8||{}),j8=97;function Pn(x){return x&j8}var m8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(m8||{}),h8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(h8||{}),IF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},rd=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+ee(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+ee(x,2)}tagToString(x){x|=0;let A=Object.entries(qi).find(([,r])=>r===x);return A?"TAG_"+A[0]:"TAG_0x"+ee(x,4)}containerIdToTag(x,A){let r=IF[x]||null;return r&&A&&x.startsWith("histdata")?26623:r}containerIdOf(x){let A=Object.entries(IF).find(([,r])=>r===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let r=x.data.getUint8(0);return r===32?"alerts":r>=0&&r<=9?`histdata${r}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},r=!!(x&A.WAKEUPABLE),e=[];x&A.POSUPDATE_ACTIVE?e=["locating",!1]:x&A.RETRY?e=["retry",!1]:x&A.STARTED?e=["dialing",!1]:x&A.ACTIVE?e=["active",!1]:x&A.FAILED?e=["failed",r]:x&A.DISABLED?e=["disabled",!1]:e=["offline",r];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:e[0],wakeupAble:e[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),r=x&255;return Math.round(A*1e3+1e3*r/256)+li}msToStamp40(x){let A=(x-li)/1e3,r=Math.trunc(A),e=Math.round((A-r)*256);return r*256+e}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,r){let e=new TextDecoder("utf-8"),t=0;for(;t<r&&x.getUint8(A+t);)t++;let a=new Uint8Array(x.buffer,A,t);return e.decode(a)}ansiUnpack(x,A,r,e){try{let t=Bi(x),a=new TextDecoder(e),s=0;for(;s<r&&t[A+s];)s++;return a.decode(t.slice(A,A+s))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${e}"`}}cp1252Unpack(x,A,r){return this.ansiUnpack(x,A,r,"cp1252")}ansiPack(x,A,r,e){let t=Bi(x);t.fill(0,A,A+r);for(let a=0;a<r&&a<e.length;a++)t[A+a]=Ad(e.charCodeAt(a))}cp1252Pack(x,A,r,e){return this.ansiPack(x,A,r,e)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,r=A.getUint16(0),e=A.getUint16(2),t=A.getUint16(4),a=A.getUint32(6),s=(ee(a,8)+ee(x.dwDevSN,8)).toUpperCase(),l=[];for(let E=0;E<(A.byteLength-10)/5;E++){let D=A.getUint8(10+E*5+2),b=A.getUint16(10+E*5);l.push({wTag:b,sTag:this.tagToString(b),size:A.getUint16(10+E*5+3),flags:{historic:!!(D&1),single:!(D&1),up:!!(D&2),down:!!(D&4),variableLength:!!(D&8),setValue:!!(D&16)}})}return{serialNumber:s,class:ee(r,4),firmwareVersion:`${Ei(t>>8,2)}v${Ei(t&255,3,"0")}`,flags:ee(e,4),utos:l}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,r={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let e=0;e<(A.byteLength-8)/5;e++)r.stamps.push(A.getUint32(8+e*5+0)*256+A.getUint8(8+e*5+4));return r}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),r=new DataView(A.buffer);return r.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(r,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,r=A.getUint16(13,!1),e={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(r&1),write:!!(r&2),node:!!(r&4),system:!!(r&8),extra:r&-16},_flags:r,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(e.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+e.flags.extra);return e}encode_FILEMAP(x){if(x.flags){let e=0;x.flags.extra&&(e|=x.flags.extra|0),x.flags.read&&(e|=1),x.flags.write&&(e|=2),x.flags.node&&(e|=4),x.flags.system&&(e|=8),x._flags=e}let A=new Uint8Array(15+x.name.length+1),r=new DataView(A.buffer);return r.setUint32(0,Math.trunc(x.stamp/256),!1),r.setUint8(4,x.stamp&255),r.setUint32(5,x.size,!1),r.setUint32(9,x.crc32,!1),r.setUint16(13,x._flags,!1),this.cp1252Pack(r,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},ex=new rd,Lt={nowMs:()=>Date.now()},Ti=class{constructor(x="(unnamed)"){s0(this,"name"),s0(this,"_locked"),s0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},MF=new WeakMap;function g8(x,A){let e=(MF.get(x)??Promise.resolve()).then(()=>ed(x,A));return MF.set(x,e.catch(()=>{})),e}async function ed(x,A){x.interface&&x.interface==="ble"?await td(async r=>{await x.write(r)},A,x.mtuSize??23):await x.write(A)}async function td(x,A,r=23){let e=new Uint8Array(A),t=r-3;for(let a=0;a<e.byteLength;a+=t){let s=e.slice(a,a+t);await x(s.buffer)}}var LF=15e3,nd=500,sd=3,id=1024;function RF(x){return x?.utos.find(r=>r.wTag===3)?.size||id}var k8=class _n extends KC.EventEmitter{constructor(A,r,e=Lt){super(),s0(this,"mdnComInterface"),s0(this,"receiveUto"),s0(this,"sendUto"),s0(this,"rxUto"),s0(this,"txStream"),s0(this,"SendUtoCmdExt"),s0(this,"utoPortLock"),s0(this,"transport"),s0(this,"logger"),s0(this,"ecsHandshakeResolver",null),s0(this,"disposeTransportListener",null),s0(this,"encrypted",!1),s0(this,"lastTxWrite",Promise.resolve()),s0(this,"timeSource"),s0(this,"fileChunkSize",RF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new Ti("UTO-Port"),this.transport=A,this.logger=r??Dr,this.timeSource=e}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,JC.default)({print:a=>{this.logger.info(`[mdnCom] ${a}`),this.emit("mdnCom",a)},printErr:a=>{this.logger.error(`[mdnCom] ${a}`),this.emit("mdnComError",a)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let r=this.mdnComInterface.addFunction(()=>{if(this.txStream){let a=this.txStream();this.lastTxWrite=g8(this.transport,a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength))}},"v"),e=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let a=this.rxUto(),s=this.parseUtoFrame(a);this.emit("utoFrame",s)}},"v");await A(r,e);let t=this.mdnComInterface.addFunction(a=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${a} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let s=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,s({success:a===0,resultCode:a})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async a=>{this.receiveUto&&await this.receiveUto(new Uint8Array(a))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let r=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(r.message),r}try{this.logger.info("[dispose] requesting context for encrypted close");let r=await this.requestContext();r?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(r)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(r){this.logger.error(`[dispose] error during context round trip: ${r}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(r){this.logger.error(`[dispose] error sending connection close: ${r}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(r){this.logger.error(`[dispose] error resetting WASM ECS state: ${r}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:ex.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,r=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let e=Math.trunc(r/256),t=r&255;return await this.sendWithRetry((a,s,l)=>{if(a.bCmd===0){let E=this.resultVerdict(a);E===5||E===0||E===4?s(null):l(a);return}if(a.wTagFull!==A)return l(a);s(a)},async()=>{this.sendUto(A,{u32SysTime:e,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:r,disc:e}=_n.resultCode(A);return e&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),r}static concatChunks(A){let r=A.reduce((a,s)=>a+s.length,0),e=new Uint8Array(r),t=0;for(let a of A)e.set(a,t),t+=a.length;return e}sendWithRetry(A,r,e){let t=e?.timeoutMs??nd,a=e?.maxRetries??sd;return new Promise((s,l)=>{let E=0,D=!1,b=()=>{},j,g={resolve:S=>{D=!0,clearTimeout(j),this.removeListener("utoFrame",b),s(S)},reject:S=>{D=!0,clearTimeout(j),this.removeListener("utoFrame",b),l(S)}},q=async()=>{b=S=>A(S,g.resolve,g.reject),this.once("utoFrame",b);try{await r()}catch(S){if(D)return;this.removeListener("utoFrame",b),l(S);return}D||(j=setTimeout(()=>{if(this.removeListener("utoFrame",b),E>=a){l(new Error(e?.timeoutMessage??`[UtoMaster] no response from device after ${a} retries`));return}E++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${E}/${a})`),q()},t))};q()})}createFrameIdleGuard(A,r,e){let t,a=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{a(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),e()},r)},clear:a}}async requestHistoricUtos(A,r,e,t=LF,a=0,s){return await this.utoPortLock.requestLock(),new Promise((l,E)=>{if(!this.sendUto)return l([]);let D=[],b=0,j=Promise.resolve(),g=T=>{if(q.arm(),T.bCmd===0){q.clear(),this.settleHistoricTransfer(T,D,s,j,l,E);return}if(T.wTagFull===A&&T.data&&(D.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),e?.(++b),s&&a>0&&D.length>=a)){let M=D.splice(0);j=j.then(()=>s(M))}this.once("utoFrame",g)},q=this.createFrameIdleGuard(g,t,()=>E(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${b} records received)`)));this.once("utoFrame",g),q.arm();let S=Math.trunc(r/256),P=r&255;this.sendUto(A,{u32SysTime:S,u8SysTime:P})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,r,e,t,a,s){let l=this.resultVerdict(A);if(!(l===5||l===0||l===4)){t.then(()=>s(A)).catch(s);return}let D=e&&r.length>0?r.splice(0):null;(D?t.then(()=>e(D)):t).then(()=>a(e?[]:r)).catch(s)}async requestFile(A,r,e=LF){return await this.utoPortLock.requestLock(),new Promise((t,a)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let s=[],l=0,E=j=>{if(D.arm(),j.bCmd===0){D.clear();let g=this.resultVerdict(j);g===5||g===0?t(_n.concatChunks(s)):a(j);return}if(j.bCmd===3&&j.data){let g=this.copyDataView(j.data);s.push(g),l+=g.byteLength,r?.(l)}this.once("utoFrame",E)},D=this.createFrameIdleGuard(E,e,()=>a(new Error(`[UtoMaster] requestFile timed out after ${e}ms (file="${A}", ${l} bytes received)`)));this.once("utoFrame",E),D.arm();let b=new Uint8Array(A.length+1);for(let j=0;j<A.length;j++)b[j]=A.charCodeAt(j)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},b)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let r=new Uint8Array(A.length+1);for(let e=0;e<A.length;e++)r[e]=A.charCodeAt(e)&255;await this.sendUTOCmdExt(10,3,r,0)}async sendSetValue(A,r,e){this.isInitialized();let t=new Uint8Array(r.length);ex.cp1252Pack(t,0,r.length,r);try{return await this.sendUTOCmdExt(11,A,t,e),{outcome:"ok",resultCode:0}}catch(a){let s=a;if(s&&s.bCmd===0&&typeof s.wTagFull=="number"){let{verdict:l}=_n.resultCode(s),E=s.wTagFull;return l===4?{outcome:"stamp",resultCode:E}:l===7||l===9?{outcome:"denied",resultCode:E}:{outcome:"error",resultCode:E}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${a}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),r=A?ex.decode_DEVINFO(A):null;return r&&(this.fileChunkSize=RF(r)),r}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?ex.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,ex.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((r,e)=>{if(!this.SendUtoCmdExt)return r({});let t={},a=s=>this.handleFileListFrame(s,t,A,r,e,a);this.once("utoFrame",a),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,r,e,t,a,s){if(A.bCmd===0){let l=this.resultVerdict(A);l===5||l===0?t(e?r[e]?{[e]:r[e]}:{}:r):a(A);return}try{let l=ex.decode_FILEMAP(A);r[l.name]=l}catch(l){a(l);return}this.once("utoFrame",s)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?ex.decode_STAMPS(A):null}async sendFile(A,r,e,t){let a=r;A===2&&(a=new Uint8Array(r.length+1),a.set(new Uint8Array(r),1),a[0]=A);let s={name:t??et,stamp:e===0?0:ex.msToStamp40(e??this.timeSource.nowMs()),size:a.length,_flags:11,crc32:wi(a)},l=ex.encode_FILEMAP(s);if(!await this.sendUTOCmdExt(9,3,l,0)){let D=this.fileChunkSize;for(let b=0;b<a.length;b+=D){let j=Math.min(D,a.byteLength-b),g=new Uint8Array(a.buffer,a.byteOffset+b,j);await this.sendUTOCmdExt(3,3,g,b*256);let S=(b+j)/a.byteLength*100;this.emit("installing",S.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,r,e,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let a=t??this.utoStampNow40,s=Math.trunc(a/256),l=a&255;return await this.sendWithRetry((E,D,b)=>{if(E.bCmd!==0){b(E);return}this.resultVerdict(E)===0?D(null):b(E)},async()=>{this.SendUtoCmdExt(A,r,{u32SysTime:s,u8SysTime:l},e),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${r.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,r,e){return this.sendUTOCmdExt(3,A,r,e)}packOtpFlashString(A){let r=new Uint8Array(1024);return ex.cp1252Pack(r,0,1024,A),r}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let r=A.companionPublicKey.slice(0,32),e=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${r.length} seed.len=${e.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(r,e);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((a,s)=>{if(A.signal?.aborted){s(new Error("Operation aborted"));return}let l=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),s(new Error("Operation aborted")))};A.signal?.addEventListener("abort",l,{once:!0}),this.ecsHandshakeResolver=D=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(D)}`),A.signal?.removeEventListener("abort",l),D.success&&(this.encrypted=!0),a(D)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let E=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${E} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),E<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",l),a({success:!1,resultCode:E})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},ad=require("events"),y8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(y8||{}),od=5e3,Fd=5e3,vd=class extends ad.EventEmitter{constructor(x,A){super(),s0(this,"atHandler"),s0(this,"debugCache",null),s0(this,"logger"),s0(this,"dataHandler"),this.atHandler=x,this.logger=A??Dr,this.dataHandler=r=>{this.processIncomingDebugData(r)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[r,e,,t]=A.split(" "),a={sequenceId:r?.substring(1),lineNumber:Number.isNaN(e)?void 0:Number(e),message:"",level:3},s=`${t.substring(1)}`,l=t.substring(0,1);"$!?~$".includes(l)&&(a.level=this.logLevelFromPrefix(l)),a.message=s,this.emitMessageEvent(a)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:r,f11:e},t){for(let a of t){a==="\xFF"&&(a="%");let s=String.fromCharCode(...e.map(l=>l.tag));if(a===""){switch(s){case"":break;case"":case"":e.pop();break;case"":break;case"":e.shift();break;default:}e.push({tag:1,buf:a,start:Date.now()})}else if(a===""){switch(s){case"":case"":break;case"":case"":continue;case"":e.pop();break;default:}let l=e.pop().buf+a;l==="****^reset****"?r=0:this.process_x01(l,r)}else if(a===""){switch(s){case"":break;case"":case"":e.pop();break;case"":break;case"":e.shift();break;default:}e.push({tag:16,buf:a,start:Date.now()})}else if(e.length){let l=e[e.length-1];if(l.tag===16&&a==="\r")continue;l.buf+=a,l.tag===16&&a===`
|
|
2628
|
+
`&&e.pop()}else{if(x||(A=Date.now()),a==="\r"||(x+=a,!(Date.now()>A+Fd||a===`
|
|
2629
2629
|
`)))continue;x.slice(0,-1).split(`
|
|
2630
|
-
`).forEach(
|
|
2630
|
+
`).forEach(E=>{this.onConsole(E)}),x=""}for(let l=e.length-1;l>=0;l--)Date.now()>e[l].start+od&&e.splice(l,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,r]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:r,date:new Date}),this.logger.debug(`#watch ${A} = ${r}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let r=x.substr(1,4);if(!this.isHex(r))return;let e=x.substr(-5,4);if(!this.isHex(e))return;let t=parseInt(r,16),a=parseInt(e,16),s=65535&(A<0?0:t-A),l=65535&a-t-x.length;if(s&&this.onConsole(`?console - x01 ${s} characters lost`),A=a,l){this.onConsole(`?console - x01 ${l} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function dr(x){return parseInt(x.slice(6),16)}function TA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function _8(x){return x?new Uint8Array(x):null}function mn(x){return{...x,data:_8(x.data)}}function Xs(x){return{...x,data:_8(x.data)}}var fd=/^400000[0-9A-F]{10}$/;function OF(x,A){if(!fd.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var ld=class w8{constructor(){s0(this,"metadata",new Map),s0(this,"utoData",new Map),s0(this,"changeRequests",[]),s0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,r){this.metadata.set(A,r)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let r=this.utoData.get(A);return!r||r.size===0?null:[...r.keys()].sort().at(-1)}async getRowForTag(A){let r=await this.getLatestStampForTag(A);return r===null?null:mn(this.utoData.get(A).get(r))}async replaceUtoRow(A){OF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,mn(A)]]))}async insertHistoricRows(A){for(let r of A){OF(r.tag,r.stamp);let e=this.utoData.get(r.tag);e||(e=new Map,this.utoData.set(r.tag,e)),e.has(r.stamp)||e.set(r.stamp,mn(r))}}async getHistoricRows(A,r){let e=this.utoData.get(A);if(!e)return[];let t=[...e.values()];if(r.fromStamp!==void 0){let s=r.fromStamp;t=t.filter(l=>l.stamp>=s)}if(r.untilStamp!==void 0){let s=r.untilStamp;t=t.filter(l=>l.stamp<=s)}t.sort((s,l)=>r.order==="desc"?l.stamp.localeCompare(s.stamp):s.stamp.localeCompare(l.stamp));let a=r.offset??0;return t.slice(a,a+r.limit).map(mn)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,r)=>A.tag-r.tag||A.stamp.localeCompare(r.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let r of A)this.changeRequests.push({tag:r.tag,stamp:TA(r.stamp40),user:r.user??"",json:r.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Xs)}async getFile(A){let r=this.files.get(A);return r?Xs(r):null}async upsertFile(A){this.files.set(A.filename,Xs(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let r of this.utoData.values())for(let e of r.values())A.push({tag:e.tag,stamp:e.stamp,flags:e.flags,site_related:e.site_related,data:e.data?Tn(e.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(r=>({...r})),files:[...this.files.values()].map(r=>({filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?Tn(r.data):null}))}}static fromJSON(A){let r=new w8;for(let[e,t]of Object.entries(A.metadata??{}))r.metadata.set(e,t);for(let e of A.utoData??[]){let t=r.utoData.get(e.tag);t||(t=new Map,r.utoData.set(e.tag,t)),t.set(e.stamp,{tag:e.tag,stamp:e.stamp,flags:e.flags,site_related:e.site_related,data:e.data?vi(e.data,`uto_data.data of tag ${e.tag}`):null})}r.changeRequests=(A.changeRequests??[]).map(e=>({...e}));for(let e of A.files??[])r.files.set(e.filename,{filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?vi(e.data,`files.data of "${e.filename}"`):null});return r}},Ed=new Set(["link","unknown"]);function $t(x){return Ed.has(x)}var S8=-2;function Pr(x){return x.index===S8}var Bd=65535,GF={configa:4294928218,configb:4294928219,configc:4294928220};function $i(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let r=/^rm2mconfig([0-9a-c])$/.exec(A);return r?`config${r[1]}`:x}function Nn(x){let A=$i(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(GF,A)?GF[A]:ex.containerIdToTag(A,!1)}function St(x){return Nn(x.name)}function cd(x,A){let r=x.byNameOrAlias(A);return Nn(r?r.name:A)}function q8(x){return Number.isInteger(x)&&x>=0&&x<=Bd}var Cd={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function dd(x){return x===void 0?"unknown":Cd[x.toLowerCase()]??"unknown"}var Dd={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},ud=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Pi="name",pd="type";function bd(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function jd(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function Te(x,A){let r=x.get(A);if(r===void 0)return;let e=parseInt(r,10);return Number.isNaN(e)?void 0:e}function md(x){let A=x.get("bitmask");if(A===void 0)return;let r=A.startsWith("$")?A.slice(1):A,e=parseInt(r,16);return Number.isNaN(e)?void 0:e}var hd=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function T8(x){let A=hd.exec(x);if(!A)return{};let r=A[1],e=r===""?NaN:Number(r);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(e)?e:void 0}}function gd(x){let A=x.get("vscale");if(A===void 0)return{value:1};let r=T8(A);if(r.ref)return{value:r.prefixValue??1,ref:r.ref};let e=Number(A);return Number.isFinite(e)?{value:e}:{value:1}}function kd(x){let A=x.get("vofs");if(A===void 0)return{value:0};let r=T8(A);if(r.ref)return{value:r.prefixValue??0,ref:r.ref};let e=Number(A);return Number.isFinite(e)?{value:e}:{value:0}}function yd(x,A){return x==="string"?A??0:Dd[x]}function _d(x){let A={};for(let[r,e]of x)ud.has(r)||(A[r]=e);return A}function wd(x,A,r){let e=dd(x.get(pd)),t=Te(x,"max"),a=yd(e,t),s=A.fields[A.fields.length-1],E=Te(x,"byteofs")??(s?s.byteofs+s.size:A.kind==="histdata"?1:0),D=A.fields.length,b=x.get(Pi)??(A.kind==="histdata"?`ch${D}`:`field${D}`),j=gd(x),g=kd(x),q=Te(x,"index");return{name:b,alias:x.get("alias"),title:x.get("title"),index:q,sortIndex:q??r,byteofs:E,type:e,size:a,max:t,decpl:Te(x,"decpl"),vscale:j.value,vofs:g.value,vscaleRef:j.ref,vofsRef:g.ref,units:x.get("units"),editmask:x.get("editmask"),view:Te(x,"view"),edit:Te(x,"edit"),default:x.get("default"),bitmask:md(x),attrs:_d(x)}}function Sd(){return{name:"",kind:"other",fields:[],recordSize:0}}function qd(x,A,r){switch(A){case Pi:{let e=$i(r);x.name=e,x.kind=jd(e);break}case"alias":x.alias=r;break;case"title":x.title=r;break;case"upload":x.upload=parseInt(r,10);break;case"download":x.download=parseInt(r,10);break;case"edit":x.edit=parseInt(r,10);break;default:break}}function Td(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!$t(A.type)).reduce((A,r)=>Math.max(A,r.byteofs+r.size),0),x.fields.sort((A,r)=>A.sortIndex-r.sortIndex)}function $d(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let r=[];for(let e=0;e<A.length;e+=2){let t=parseInt(A.slice(e,e+2),16);r.push(Number.isNaN(t)?0:t)}return{keyBytes:r,matchAll:!1}}function Pd(x){return x.toLowerCase()==="histdata28"?"applog0":$i(x)}function Nd(x){let{keyBytes:A,matchAll:r}=$d(x.get("key")??"00");return{source:x.get("source")??"",target:Pd(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:r,keepraw:Te(x,"keepraw")}}function Id(x,A){return{containers:x,splits:A,byNameOrAlias(r){let e=r.toLowerCase();return x.find(t=>t.name.toLowerCase()===e||(t.alias??"").toLowerCase()===e)??null}}}function Md(x,A){switch(A){case"<table>":return x.container=Sd(),x.expectName=!0,!0;case"</table>":return x.container&&(Td(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(wd(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(Nd(x.split)),x.split=null,!0;default:return!1}}function Ld(x,A){let{key:r,value:e}=bd(A);if(x.split)x.split.set(r,e);else if(x.field)x.field.set(r,e);else if(x.container){if(x.expectName&&r!==Pi)throw new Error(`?dde.first-table-attr-not-name."${r}"`);x.expectName=!1,qd(x.container,r,e)}}function Rd(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[r,e]of x.replace(/\r\n/g,`
|
|
2631
2631
|
`).replace(/\r/g,`
|
|
2632
2632
|
`).split(`
|
|
2633
|
-
`).entries()){A.line=r;let t=e.trim();t===""||t.startsWith("//")||Bd(A,t)||t.includes("=")&&cd(A,t)}return Ed(A.containers,A.splits)}var h8=null,dd=4;function tt(x){let A=new Date(x),r=(e,t)=>e.toString().padStart(t,"0");return r(A.getUTCFullYear(),4)+r(A.getUTCMonth()+1,2)+r(A.getUTCDate(),2)+r(A.getUTCHours(),2)+r(A.getUTCMinutes(),2)+r(A.getUTCSeconds(),2)+r(A.getUTCMilliseconds(),3)}function st(x){let A=x.trim();if(A==="*")return h8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let r=(p,j,g)=>{let q=A.slice(p,p+j);return parseInt(q.length?q.padEnd(j,"0"):g,10)},e=parseInt(A.slice(0,dd),10),t=A.length>=6?r(4,2,"01"):1,a=A.length>=8?r(6,2,"01"):1,s=r(8,2,"00"),l=r(10,2,"00"),B=r(12,2,"00"),D=r(14,3,"000");return Date.UTC(e,t-1,a,s,l,B,D)}var $t="NAN",Dd="%HEX%",ud=65535,$i=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),s0(this,"alias",x),this.name="DdeUnknownAliasError"}};function Gn(x){return(x.alias??x.name).toLowerCase()}function Un(x){return x==="string"}function Pi(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function g8(x){return(x.editmask??"").toUpperCase()===Dd}function bd(x,A){return A===void 0||!Number.isFinite(x)?x:Ni(x,A)}function Ni(x,A){if(!Number.isFinite(x))return x;let r=10**A;return Math.sign(x)*Math.round(Math.abs(x)*r)/r}function pd(x,A){if(!Number.isFinite(x)||x===0)return x;let r=Math.abs(x),e=Math.floor(Math.log10(r));return 10**(e+1)<=r?e+=1:10**e>r&&(e-=1),Ni(x,A-1-e)}function jd(x){return x==="floatm16"||x==="f32"||x==="f64"}function md(x,A){if(!Number.isFinite(A))return A;let r=x.decpl??(jd(x.type)?9:0),e=Ni(A,r),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return pd(e,t)}function Pn(x,A){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),e=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,a=1n;for(;e!==0n;)e&1n&&(r&1n&&(t|=a),a<<=1n),r>>=1n,e>>=1n;return Number(t)}function k8(x,A,r){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),a=BigInt.asUintN(64,BigInt(Math.trunc(r))),s=1n;for(;a!==0n;)a&1n&&(e=t&1n?e|s:e&~s,t>>=1n),a>>=1n,s<<=1n;return Number(e)}var hd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Nn(x){return!!x.bitmask&&hd.has(x.type)}var y8=255,_8=254,w8=253,S8=252,q8=251,gd=207,Ii=65535,In=65534,Mi=65533,Li=65532,Ri=65531;function kd(x){switch(x){case y8:return Ii;case _8:return In;case w8:return Mi;case S8:return Li;case q8:return Ri;default:return x<=31?x:x>gd?In:(x&15|16)<<(x>>4)-1}}function yd(x){switch(x){case Ii:return y8;case In:return _8;case Mi:return w8;case Li:return S8;case Ri:return q8;default:{if(x<=31)return x;let A=1,r=x;for(;(r&65504)>0;)r>>=1,A++;return A<<4|r&15}}}var Mn=1023,Ei=31,T8=127,Ws=8388607,_d=255,Bi=15,wd=-14,$F=15;function $8(x){let A=(x&Mn)<<13,r=(x&31744)>>10;if(r===Ei)return N8(1024-(x&Mn));r!==0&&(r=r-Bi+4+T8);let e=(A|r<<23)>>>0;x&32768&&(e=(e|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,e),t.getFloat32(0)}function P8(x){if(typeof x=="string"||Number.isNaN(x))return ud;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let r=A.getUint32(0),e=r>>>16&32768,t=(r&Ws)+4096,a=(t>Ws?1:0)+(r>>>23&_d),s=(t&Ws)>>>13;return a!==0&&(a=a-T8-4,a<wd?(s=0,a=0):a>$F?(s=Mn,a=$F+Bi):a=a+Bi),e|a<<10|s}var Sd=["OF","UF","OL","SC"],ci={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:Ii,OF:In,UF:Mi,OL:Li,SC:Ri}},qd={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},vA={NAN:1,OF:2,UF:3,OL:4,SC:5},Td=new Set(["u8","u16","u32","ufm8"]);function $d(x){let A=Math.floor(x),r=x-A;return r<.5?A:r>.5?A+1:A%2===0?A:A+1}function Oi(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let r=Number(A);return Number.isFinite(r)?r:null}function Gi(x,A,r){switch(x){case"u8":return A.getUint8(r);case"s8":return A.getInt8(r);case"u16":return A.getUint16(r,!1);case"s16":return A.getInt16(r,!1);case"u32":return A.getUint32(r,!1);case"s32":return A.getInt32(r,!1);case"s64":return Number(A.getBigInt64(r,!1));case"f32":return A.getFloat32(r,!1);case"f64":return A.getFloat64(r,!1);case"floatm16":return $8(A.getUint16(r,!1));case"ufm8":return kd(A.getUint8(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function N8(x){switch(x){case vA.OF:return"OF";case vA.UF:return"UF";case vA.OL:return"OL";case vA.SC:return"SC";default:return $t}}var PF=[["NAN",vA.NAN],["OF",vA.OF],["UF",vA.UF],["OL",vA.OL],["SC",vA.SC]];function Pd(x,A){let r=x.getUint32(A,!1);if((r&2139095040)!==2139095040)return 0;let e=r&8388607;return e===0?vA.NAN:(e=e&4194304?8388608-e:e&255,e===0?vA.NAN:e)}function Nd(x,A){let r=x.getBigUint64(A,!1);if((r&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let e=Number(r&0xffn);return e===0?vA.NAN:e}function Id(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Nn(x)&&(t=BigInt(Pn(Number(t),x.bitmask)));let a=ci.s64;return PF.find(([s])=>t===BigInt(a[s]))?.[1]??0}let r=ci[x.type];if(!r)return 0;let e=Gi(x.type,A,x.byteofs);return Nn(x)&&(e=Pn(e,x.bitmask)),PF.find(([t])=>e===r[t])?.[1]??0}function I8(x,A){switch(x.type){case"floatm16":{let r=A.getUint16(x.byteofs,!1);return(r>>10&Ei)===Ei?1024-(r&Mn):0}case"f32":return Pd(A,x.byteofs);case"f64":return Nd(A,x.byteofs);default:return Id(x,A)}}function M8(x,A){let r=Gi(x.type,A,x.byteofs);return typeof r=="string"||Number.isNaN(r)?NaN:(Nn(x)&&(r=Pn(r,x.bitmask)),r*x.vscale+x.vofs)}function Md(x,A){let r=I8(x,A);if(r!==0)return N8(r);let e=M8(x,A);return Number.isNaN(e)?$t:md(x,e)}function Ld(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Un(x.type)||Pi(x.type))return NaN;let r=new DataView(A.buffer,A.byteOffset,A.byteLength);return I8(x,r)!==0?NaN:M8(x,r)}function Rd(x,A){if(g8(x)){let r="";for(let e=0;e<x.size;e++)r+=A.getUint8(x.byteofs+e).toString(16).padStart(2,"0");return r.toUpperCase()}return ex.cp1252Unpack(A,x.byteofs,x.size)}var L8=25569,R8=864e5;function Od(x){return(x-L8)*R8}function Gd(x){return x/R8+L8}function Ud(x,A){if(x.type==="datetime")return tt(Od(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let e=A.getBigUint64(x.byteofs,!1),t=Number(e&0xffffffffffn);return tt(ex.stamp40ToMS(t))}let r=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(r+=A.getUint8(x.byteofs+4)),tt(ex.stamp40ToMS(r))}var Hd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Jd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function Kd(x){let A=x.default;if(A===void 0)return;if(Un(x.type))return A;let r=A.trim();if(r===""||r.toUpperCase()===$t)return $t;if(Hd.has(x.type))return Jd(r,0);let e=Oi(r);return e!==null?e:A}function zd(x,A,r){return x.byteofs+x.size>r?Kd(x):Un(x.type)?Rd(x,A):Pi(x.type)?Ud(x,A):Md(x,A)}function Ci(x,A){let r=new DataView(A.buffer,A.byteOffset,A.byteLength),e={};for(let t of x.fields)Pr(t)||Tt(t.type)||(e[Gn(t)]=zd(t,r,A.byteLength));return e}function Vd(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===$t||A==="")return{kind:"sentinel",state:"NAN"};let r=Sd.find(t=>t===A);if(r)return{kind:"sentinel",state:r};if("OUS".includes(A[0]))return{kind:"skip"};let e=Oi(A);return e!==null?{kind:"value",physical:e}:NF(x)}return NF(x)}function NF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Oi(A):null)??0}}function di(x,A,r){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,qd[r],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|vA[r])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(vA[r]),!1);default:break}let e=ci[x.type]?.[r];if(e===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(e),!1);O8(x,A,Number(e))}function Wd(x,A,r){if(x.vscale===0)return;let e=(r-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,e,!1);case"f64":return A.setFloat64(x.byteofs,e,!1);case"floatm16":return A.setUint16(x.byteofs,P8(e),!1);default:break}if(Number.isNaN(e))return di(x,A,"NAN");if(!Number.isFinite(e))return di(x,A,"OF");let t=e;Td.has(x.type)&&t<0&&(t=0),O8(x,A,$d(t))}function O8(x,A,r){if(Nn(x)){let e=Gi(x.type,A,x.byteofs);r=k8(e,r,x.bitmask)}Xd(x.type,A,x.byteofs,r)}function Xd(x,A,r,e){switch(x){case"u8":return A.setUint8(r,e);case"s8":return A.setInt8(r,e);case"u16":return A.setUint16(r,e,!1);case"s16":return A.setInt16(r,e,!1);case"u32":return A.setUint32(r,e,!1);case"s32":return A.setInt32(r,e,!1);case"s64":return A.setBigInt64(r,BigInt(e),!1);case"ufm8":return A.setUint8(r,yd(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function Yd(x,A,r){let e=String(r);if(g8(x)){let t=e.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${Gn(x)}"`);for(let a=0;a<x.size;a++){let s=a*2<t.length?parseInt(t.substr(a*2,2),16):0;A.setUint8(x.byteofs+a,s)}return}ex.cp1252Pack(A,x.byteofs,x.size,e)}function Qd(x,A,r){let e=st(String(r));if(e===null)throw new Error(`?ddeCodec.unbounded-stamp."${Gn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,Gd(e),!1);return}let t=ex.msToStamp40(e);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function Zd(x,A,r){if(Un(x.type))return Yd(x,A,r);if(Pi(x.type))return Qd(x,A,r);let e=Vd(x,r);switch(e.kind){case"skip":return;case"sentinel":return di(x,A,e.state);case"value":return Wd(x,A,e.physical)}}function Di(x,A,r){let e=r?new Uint8Array(r):new Uint8Array(x.recordSize),t=new DataView(e.buffer,e.byteOffset,e.byteLength),a=new Map(x.fields.filter(s=>!Pr(s)&&!Tt(s.type)).map(s=>[Gn(s),s]));for(let[s,l]of Object.entries(A)){let B=a.get(s.toLowerCase());if(!B)throw new $i(s);Zd(B,t,l)}return e}var IF=99,xD=256,te=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),s0(this,"container",x),this.name="DdeUnknownContainerError"}},Pt=class extends Error{constructor(x,A){let r=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${r}"`),s0(this,"container",x),s0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ui=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),s0(this,"field",x),this.name="DdeUnknownFieldError"}};function Xs(x){return(x.alias??x.name).toLowerCase()}var AD=class{constructor(x,A,r=Mt){s0(this,"model",x),s0(this,"storage",A),s0(this,"timeSource",r)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let r=wt(A);if(r===null)return null;let e=await this.storage.getRowForTag(r);if(!e||!e.data)return null;let t=Ci(await this.resolveScaleRefs(A),e.data);return delete t.stamp,{stamp:this.rowStamp(e),...t}}async writeContainer(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=wt(r);if(e===null)throw new te(x);if(r.edit===IF)throw new Pt(r.name);let{stamp:t,...a}=A;this.assertFieldsWritable(r,a);let s=await this.storage.getRowForTag(e),l=Di(await this.resolveScaleRefs(r),a,s?.data??null),B=ex.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),D=TA(B);return await this.storage.replaceUtoRow({tag:e,stamp:D,flags:s?.flags??0,site_related:s?.site_related??0,data:l}),{tag:e,stampHex:D,stamp40:B,data:l,devicePushable:j8(e)&&r.download!==0,upload:r.upload,download:r.download}}async seedContainer(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=wt(r);if(e===null)throw new te(x);let{stamp:t,...a}=A,s=Di(await this.resolveScaleRefs(r),a,null),l=ex.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:e,stamp:TA(l),flags:0,site_related:0,data:s})}recordStampMs(x){if(typeof x!="string")return null;try{return st(x)}catch{return null}}async readTimeseries(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=this.model.splits.find(D=>D.target.toLowerCase()===r.name.toLowerCase());if(!e)throw new te(x);let t=Math.abs(A.count),a=A.offset??0,s=this.buildSelectSet(r,A.select),l=await this.resolveScaleRefs(r);return(await this.collectMatched(l,e,a+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:s})).slice(a,a+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((r,e)=>x[e]===r)}async collectMatched(x,A,r,e){let t=[];if(r<=0)return t;let a=Math.max(r,xD);for(let s=0;;s+=a){let l=await this.storage.getHistoricRows(26623,{fromStamp:e.fromStamp,untilStamp:e.untilStamp,order:e.order,limit:a,offset:s});for(let B of l)if(B.data&&this.matchesSplit(B.data,A)&&(t.push(this.recordFromRow(x,B,e.selectSet)),t.length>=r))return t;if(l.length<a)return t}}async readTimeseriesEdge(x,A,r){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:r}))[0]??null}recordFromRow(x,A,r){let e=Ci(x,A.data),t={stamp:this.rowStamp(A)};for(let[a,s]of Object.entries(e))a!=="stamp"&&(!r||r.has(a))&&(t[a]=s);return t}rowStamp(x){return tt(ex.stamp40ToMS(dr(x.stamp)))}boundHex(x){if(x!=null)return TA(ex.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(e=>e.vscaleRef||e.vofsRef))return x;let A=new Map,r=[];for(let e of x.fields){if(!e.vscaleRef&&!e.vofsRef){r.push(e);continue}r.push({...e,vscale:e.vscaleRef?await this.resolveRef(e.vscaleRef,A,e.vscale):e.vscale,vofs:e.vofsRef?await this.resolveRef(e.vofsRef,A,e.vofs):e.vofs})}return{...x,fields:r}}async resolveRef(x,A,r){if(!/^config[0-9a-f]$/i.test(x.container))return r;let e=this.referencedField(x);if(!e)return r;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let a=A.get(t);if(!a)return r;let s=Ld(e,a);return s===null?r:s}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(e=>Xs(e)===A||e.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let r=wt(A);return r===null?null:(await this.storage.getRowForTag(r))?.data??null}assertFieldsWritable(x,A){let r=new Map(x.fields.filter(e=>!Pr(e)&&!Tt(e.type)).map(e=>[Xs(e),e]));for(let e of Object.keys(A)){let t=r.get(e.toLowerCase());if(t&&t.edit===IF)throw new Pt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let r=new Set(x.fields.filter(t=>!Pr(t)&&!Tt(t.type)).map(t=>Xs(t))),e=new Set;for(let t of A){let a=t.toLowerCase();if(a!=="stamp"){if(!r.has(a))throw new Ui(t);e.add(a)}}return e}},rD=new Set(["$titles","$meta"]);function eD(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function ui(x,A){let r=A.toLowerCase();if(rD.has(r))return null;let e=x[r];if(typeof e!="object"||e===null)return null;let t=new Map;for(let[a,s]of Object.entries(e)){if(typeof s!="object"||s===null)continue;let l=s.alias;typeof l=="string"&&l.length>0&&t.set(a.toLowerCase(),l)}return t}function G8(x,A){let r={};for(let[e,t]of Object.entries(x)){if(e==="stamp"){r[e]=t;continue}let a=A?.get(e.toLowerCase());r[a??e]=t}return r}function Lt(x,A){if(!x)return null;let r=ui(x,A.name);return r||(A.alias?ui(x,A.alias):null)}var tD=require("events"),W0="[OfflineSyncManager]",nD=500,sD="site_info",iD=new Set(["local-data-interface.json"]);function rA(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function aD(x){let A=Tn(x);return!!(x&2)||A!==0&&A!==65}function MF(x){return x.filter(A=>(A.filename===et||A.filename===_i)&&A.outcome==="download").map(A=>A.filename)}var _e="skip-equal",rt="skip-device-readonly",Ys="delete",re="error",Qs="upload",Zs="uploading-utos",LF="downloading-utos",jn="fetching-device-state",xi="uploading-files",mn="downloading-files",RF="executing-change-requests",OF="executed",oD="error",Ai="skip-old-stamp",FD=class extends tD.EventEmitter{constructor(x,A,r){super(),s0(this,"utoMaster",x),s0(this,"storage",A),s0(this,"logger",r)}emitProgress(x,A,r,e,t){let a={phase:x,item:A,completed:r,total:e,...t};this.emit("progress",a)}async uploadHistoricTag(x,A,r,e,t){try{let a=await this.storage.getRowForTag(x),s=0,l=async B=>{let D=B.filter(p=>p.stamp40>r).map(p=>({tag:x,stamp:TA(p.stamp40),flags:a?.flags??0,site_related:a?.site_related??0,data:p.data}));await this.storage.insertHistoricRows(D),s+=D.length};return await this.utoMaster.requestHistoricUtos(x,r,t,void 0,nD,l),this.logger?.info(`${W0} historic upload tag=0x${x.toString(16)} +${s} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:r,deviceStamp40:e,recordsAppended:s}}catch(a){return this.logger?.error(`${W0} historic upload error tag=0x${x.toString(16)}: ${a}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async uploadSingleTag(x,A,r,e){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${W0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:_e,dbStamp40:r,deviceStamp40:e};let a=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:TA(t.stamp),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${W0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:r,deviceStamp40:e}}catch(t){return this.logger?.error(`${W0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async uploadUtoTags(x,A,r,e){let t=x.length;this.emitProgress(Zs,null,0,t);let a=0;for(let s of x){rA(e);let l=A.get(s),{tagInfo:B,dbStamp40:D,deviceStamp40:p}=l;if(this.emitProgress(Zs,B?.sTag??`0x${s.toString(16)}`,a,t),!B||p===null)r.set(s,{tag:s,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:D,deviceStamp40:p});else if(!(!B.flags.up||p<=D)){let j=B.sTag,g=a,q=B.historic?await this.uploadHistoricTag(s,B,D,p,S=>{this.emitProgress(Zs,j,g,t,{recordsReceived:S})}):await this.uploadSingleTag(s,B,D,p);r.set(s,q)}++a}}async pullFileFromDevice(x,A,r,e,t,a){let s=A.stamp;try{let l=await this.utoMaster.requestFile(x,D=>{this.emitProgress(xi,x,a,t,{bytesTransferred:D})}),B=yi(l);if(B!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${B.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:TA(s),crc:A.crc32,size:l.byteLength,flags:A._flags,flags_int:e,data:l}),{filename:x,outcome:Qs,dbStamp40:r,deviceStamp40:s}}catch(l){return this.logger?.error(`${W0} file upload error ${x}: ${JSON.stringify(l)}`),{filename:x,outcome:re,dbStamp40:r,deviceStamp40:s}}}async autoSyncUploadFile(x,A,r,e,t,a,s,l){let B=A.stamp;if(B>e)return this.fileContentMatches(A,r)?this.convergeFileStamp(x,A,r,e):a?this.pullFileFromDevice(x,A,e,t,s,l):void 0;if(B===e&&this.fileContentMatches(A,r))return{filename:x,outcome:_e,dbStamp40:e,deviceStamp40:B}}async convergeFileStamp(x,A,r,e){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:TA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:r.flags_int,data:r.data}),{filename:x,outcome:_e,dbStamp40:e,deviceStamp40:t}}catch(a){return this.logger?.error(`${W0} file upload error ${x}: ${JSON.stringify(a)}`),{filename:x,outcome:re,dbStamp40:e,deviceStamp40:t}}}async mirrorUploadFile(x,A,r,e,t,a,s){let l=A.stamp;if(l!==e||!this.fileContentMatches(A,r))return t?this.pullFileFromDevice(x,A,e,r.flags_int,a,s):{filename:x,outcome:rt,dbStamp40:e,deviceStamp40:l}}async decideFileUpload(x,A,r,e){let t=await this.storage.getFile(x),a=!!(A._flags&1);if(!t)return a?this.pullFileFromDevice(x,A,0,16,r,e):void 0;let s=dr(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,s,t.flags_int,a,r,e):this.decideNonSystemUpload(x,A,t,s,a,r,e)}pullIfReadable(x,A,r,e,t,a,s){return x?this.pullFileFromDevice(A,r,e,t,a,s):void 0}async decideNonSystemUpload(x,A,r,e,t,a,s){let l=r.flags_int;if(!(l&2))return l&4?this.pullIfReadable(t,x,A,e,l,a,s):this.decideUploadBySyncLogic(x,A,r,e,t,a,s)}async decideUploadBySyncLogic(x,A,r,e,t,a,s){let l=r.flags_int,B=Tn(l);if(B===65)return this.fileContentMatches(A,r)?this.convergeFileStamp(x,A,r,e):this.pullIfReadable(t,x,A,e,l,a,s);if(B===1)return this.autoSyncUploadFile(x,A,r,e,l,t,a,s);if(B===97)return A.stamp>e?this.pullIfReadable(t,x,A,e,l,a,s):void 0;if(B!==33)return this.mirrorUploadFile(x,A,r,e,t,a,s)}async uploadFiles(x,A,r,e){let t=Object.entries(x),a=t.length;this.emitProgress(xi,null,0,a);let s=0;for(let[l,B]of t){if(rA(e),!(l===_i||l===et&&!r)){let p=await this.decideFileUpload(l,B,a,s);p&&A.set(l,p)}this.emitProgress(xi,l,++s,a)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,r,e){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,r),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:r,deviceStamp40:e}}catch(t){return this.logger?.error(`${W0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async processDownloadTag(x,A,r,e,t){if(r===e&&!t.has(x)){let a=A.flags.up?_e:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:a,dbStamp40:r,deviceStamp40:e});return}if(r>e){let a=A.flags.down?await this.downloadSingleTag(x,A,r,e):{tag:x,sTag:A.sTag,historic:!1,outcome:rt,dbStamp40:r,deviceStamp40:e};t.set(x,a)}}async downloadUtoTags(x,A,r,e){let t=x.length;this.emitProgress(LF,null,0,t);let a=0;for(let s of x){rA(e);let{tagInfo:l,dbStamp40:B,deviceStamp40:D}=A.get(s);l&&D!==null&&!l.historic&&await this.processDownloadTag(s,l,B,D,r),this.emitProgress(LF,l?.sTag??`0x${s.toString(16)}`,++a,t)}}async sendFileToDevice(x,A,r,e,t){let a=x.data.byteLength,s=l=>{if(l!==null){let B=Math.round(a*parseInt(l,10)/100);this.emitProgress(mn,x.filename,t,e,{bytesTransferred:B,bytesTotal:a})}};this.utoMaster.on("installing",s);try{return await this.utoMaster.sendFile(0,x.data,ex.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:r}}catch(l){return this.logger?.error(`${W0} file download error ${x.filename}: ${l}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:r}}finally{this.utoMaster.removeListener("installing",s)}}async processDownloadFile(x,A,r,e,t=!1){if(!x.data)return;let a=A?.stamp??0,s=dr(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return s===a?void 0:{filename:x.filename,outcome:_e,dbStamp40:s,deviceStamp40:a};if(!(!t&&s<a))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:rt,dbStamp40:s,deviceStamp40:a}:this.sendFileToDevice(x,s,a,r,e)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(sD);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${W0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,r,e){let t=await this.storage.getFiles(),a=t.filter(j=>j.flags&8),s=t.filter(j=>!(j.flags&8)),l=[...a,...s].filter(j=>j.filename),B=Object.entries(x).filter(([,j])=>j._flags&4).map(([j])=>j),D=l.length;this.emitProgress(mn,null,0,D);let p=0;for(let j of l){if(rA(e),r&&j.filename===et){this.emitProgress(mn,j.filename,++p,D);continue}let g=j.filename===et&&!r,q=await this.decideFileDownload(j,x[j.filename],A.get(j.filename),B,g,D,p);q&&A.set(j.filename,q),this.emitProgress(mn,j.filename,++p,D)}}async decideFileDownload(x,A,r,e,t,a,s){return A!==void 0?this.decideDownloadExisting(x,A,r,t,a,s):this.decideDownloadMissing(x,e,a,s)}async decideDownloadExisting(x,A,r,e,t,a){if(A._flags&4)return;if(x.flags&8)return r?void 0:this.processDownloadFile(x,A,t,a,e);let s=x.flags_int;if(s&8)return this.handleDeviceDelete(x,A,r);if(!r&&!(s&4))return this.pushToDevice(x,A,t,a)}async pushToDevice(x,A,r,e){let t=A.stamp,a=dr(x.stamp),s=this.wantDownloadPush(x,A,a,t);if(s==="match")return{filename:x.filename,outcome:_e,dbStamp40:a,deviceStamp40:t};if(s!=="none"&&!(a===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,a,t,r,e):{filename:x.filename,outcome:rt,dbStamp40:a,deviceStamp40:t}}wantDownloadPush(x,A,r,e){let t=x.flags_int;if(t&2)return"push";let a=this.fileContentMatches(A,x),s=Tn(t);return s===33||s===1&&r>=e?a?"match":"push":s===97&&r>e?"push":"none"}async handleDeviceDelete(x,A,r){let e=A.stamp,t=dr(x.stamp);if(!(r&&(r.outcome===Qs||r.outcome===re))){if(!(A._flags&2))return{filename:x.filename,outcome:rt,dbStamp40:t,deviceStamp40:e};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ys,dbStamp40:t,deviceStamp40:e}}catch(a){return this.logger?.error(`${W0} file delete error ${x.filename}: ${JSON.stringify(a)}`),{filename:x.filename,outcome:re,dbStamp40:t,deviceStamp40:e}}}}async decideDownloadMissing(x,A,r,e){let t=x.flags_int,a=dr(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ys,dbStamp40:a,deviceStamp40:null}}catch(s){return this.logger?.error(`${W0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:re,dbStamp40:a,deviceStamp40:null}}if(!(x.flags&12)&&aD(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,a,0,r,e)}hasMatchingNode(x,A){return A.some(r=>r.slice(0,-1)===x.slice(0,r.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${W0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),r=new Set(Object.keys(A)),e=await this.storage.getFiles(),t=new Map(e.map(a=>[a.filename,a]));for(let[a,s]of Object.entries(A))rA(x),await this.reconcileDeviceFile(a,s,t.get(a)??null);for(let a of e)rA(x),r.has(a.filename)||await this.dropRowMissingFromDevice(a)}async reconcileDeviceFile(x,A,r){let e=!!((A._flags|(r?.flags??0))&8);if(r?.data&&!this.fileContentMatches(A,r)){this.logger?.info(`${W0} reconcile keep ${x}: row holds undeployed content`);return}if(!r?.data&&!e)return;let t={filename:x,stamp:TA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:r?.flags_int??16,data:this.keepBlob(x,e)?r?.data??null:null};r&&this.fileRowMatches(r,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||iD.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${W0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){rA(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${W0} requestDeviceInfo returned null`);let r=await this.storage.getMetadataValue("device_id");if(r===null){if(!A.serialNumber)throw new Error(`${W0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${W0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),r=A.serialNumber}if(r.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${W0} DB device_id "${r}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let r=0;r<x.utos.length;r++){let e=x.utos[r];A.set(e.wTag,{index:r,flags:{up:e.flags.up,down:e.flags.down,setValue:!!e.flags.setValue},historic:e.flags.historic,sTag:e.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),r=new Set(A);for(let[e,t]of x)t.historic&&!r.has(e)&&A.push(e);return A}async buildTagStampCache(x,A,r){let e=new Map;for(let t of x){let a=A.get(t),s=await this.storage.getLatestStampForTag(t),l=s?dr(s):0,B=a&&a.index<r.stamps.length?r.stamps[a.index]:null;e.set(t,{dbStamp40:l,deviceStamp40:B,tagInfo:a})}return e}async executeChangeRequests(x,A,r,e,t,a){let s=await this.storage.getUtoChangeRequests(),l=this.groupChangeRequests(s),B=l.size;if(this.emitProgress(RF,null,0,B),B===0)return;let D=new Set,p=0;for(let[j,g]of l){rA(a);let q=x.get(j),S=q?.sTag??`0x${j.toString(16)}`;this.emitProgress(RF,S,p,B),await this.executeChangeRequestTag(j,S,q,g,A,e,t,D),++p}D.size>0&&await this.repullExecutedTags(D,x,r,a)}groupChangeRequests(x){let A=new Map;for(let r of x){let e=A.get(r.tag)??[];e.push({stamp40:dr(r.stamp),user:r.user,json:r.json}),A.set(r.tag,e)}return A}async executeChangeRequestTag(x,A,r,e,t,a,s,l){if(!r){this.pushChangeResults(s,x,A,e,"unknown-tag");return}if(!r.flags.setValue){this.pushChangeResults(s,x,A,e,"skip-unsupported");return}let B=r.index<t.stamps.length?t.stamps[r.index]:0,D=e.filter(j=>j.stamp40<=B),p=e.filter(j=>j.stamp40>B);this.pushChangeResults(s,x,A,D,Ai),p.length>0&&await this.coalesceAndSend(x,A,r,p,a,s,l)}async coalesceAndSend(x,A,r,e,t,a,s){let l=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===re||!l||!l.data){this.pushChangeResults(a,x,A,e,"error");return}let B=this.resolveSetObject(l.data,e,A);if(B===null){this.pushChangeResults(a,x,A,e,"error");return}if(Object.keys(B).length===0){this.pushChangeResults(a,x,A,e,"skip-no-change");return}let D=e[e.length-1].stamp40,p=await this.utoMaster.sendSetValue(x,JSON.stringify(B),D);p.outcome==="ok"||p.outcome==="stamp"?(s.add(x),this.pushChangeResults(a,x,A,e,OF,p.resultCode)):p.outcome==="denied"?(this.logger?.warn(`${W0} change-request denied ${A} (result=${p.resultCode}) \u2014 server will retry`),this.pushChangeResults(a,x,A,e,"denied",p.resultCode)):(this.logger?.error(`${W0} change-request error ${A} (result=${p.resultCode})`),this.pushChangeResults(a,x,A,e,"error",p.resultCode))}resolveSetObject(x,A,r){try{let e=JSON.parse(ex.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(e,A,r)}catch(e){return this.logger?.error(`${W0} change-request unparseable uto_data ${r}: ${e}`),null}}buildSetObject(x,A,r){let e={};for(let t of A){let a=JSON.parse(t.json);if(!this.isPlainRecord(a))throw new Error(`change-request JSON is not an object on ${r}`);for(let[s,l]of Object.entries(a)){let B=this.resolveChangeField(x[s],l,s,r);B.apply&&(e[s]=B.value,x[s]=B.value)}}return e}resolveChangeField(x,A,r,e){if(this.isBitwiseOp(A)){let{op:t,val:a}=A;return this.resolveBitwiseOp(x,t,a,r,e)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,r,e,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${W0} change-request unknown op "${A}" on ${t}.${e} \u2014 skipped`),{apply:!1}):typeof r!="number"?(this.logger?.warn(`${W0} change-request op "${A}" with non-number val on ${t}.${e} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:r}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${W0} change-request op "${A}" on non-number ${t}.${e} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|r:x&r}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,r,e,t,a){for(let s of e)x.push({tag:A,sTag:r,stamp40:s.stamp40,user:s.user,outcome:t,resultCode:a})}async repullExecutedTags(x,A,r,e){let t=null;try{t=await this.utoMaster.requestStamps()}catch(a){this.logger?.warn(`${W0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${a}`)}for(let a of x)rA(e),await this.repullExecutedTag(a,A,t,r)}async repullExecutedTag(x,A,r,e){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${W0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let a=await this.storage.getRowForTag(x),s=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:TA(s),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let l=e.get(x);if(l){let B=A.get(x),D=r&&B&&B.index<r.stamps.length?r.stamps[B.index]:s;l.dbStamp40=s,l.deviceStamp40=D}this.logger?.info(`${W0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${s}`)}catch(t){this.logger?.error(`${W0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,r){let e=[...x.values()],t=[...A.values()],a=MF(t);return{tags:e,files:t,changeRequests:r,requiresReconnectSync:a.length>0,rebootFilesDeployed:a,totalTagsUploaded:e.filter(s=>s.outcome==="upload"&&!s.historic).length,totalTagsDownloaded:e.filter(s=>s.outcome==="download").length,totalTagsSkipped:e.filter(s=>s.outcome===_e||s.outcome==="skip-db-readonly"||s.outcome===rt).length,totalHistoricRecordsAppended:e.reduce((s,l)=>s+(l.recordsAppended??0),0),totalFilesUploaded:t.filter(s=>s.outcome===Qs).length,totalFilesDownloaded:t.filter(s=>s.outcome==="download").length,totalFilesDeleted:t.filter(s=>s.outcome===Ys).length,totalChangeRequestsExecuted:r.filter(s=>s.outcome===OF).length,totalErrors:e.filter(s=>s.outcome===re).length+t.filter(s=>s.outcome===re).length+r.filter(s=>s.outcome===oD).length}}async sync(x){let{signal:A}=x??{},r=await this.validateDevice(A);rA(A),this.emitProgress(jn,null,0,3);let e=this.buildTagMap(r),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${W0} requestStamps returned null`);this.emitProgress(jn,"stamps",1,3);let a=await this.utoMaster.requestFileList();this.emitProgress(jn,"file-list",2,3);let s=await this.resolveDbTags(e);this.emitProgress(jn,"db-tags",3,3);let l=await this.buildTagStampCache(s,e,t),B=new Map,D=new Map,p=[],j=await this.isAppInDevPhase();return rA(A),await this.uploadUtoTags(s,l,B,A),rA(A),await this.uploadFiles(a,D,j,A),rA(A),await this.executeChangeRequests(e,t,l,B,p,A),rA(A),await this.downloadUtoTags(s,l,B,A),rA(A),await this.downloadFiles(a,D,j,A),rA(A),MF([...D.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(B,D,p)}async executeAdHocChangeRequest(x,A){let r=await this.utoMaster.requestDeviceInfo();if(!r)throw new Error(`${W0} requestDeviceInfo returned null`);let e=this.buildTagMap(r),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${W0} requestStamps returned null`);let a=e.get(x),s=a?.sTag??`0x${x.toString(16)}`,l=A.map(g=>({stamp40:g.stamp40,user:"",json:g.json})).sort((g,q)=>g.stamp40-q.stamp40),B=new Map,D=[],p=new Set;return await this.executeChangeRequestTag(x,s,a,l,t,B,D,p),p.size>0&&await this.repullExecutedTags(p,e,new Map,void 0),D.find(g=>g.outcome!==Ai)?.outcome??Ai}},vD=require("events"),fD=require("events"),lD=require("events"),ED=5e3,Hi=class U8 extends lD.EventEmitter{constructor(A=Dr){super(),s0(this,"logger",A),s0(this,"ws",null),s0(this,"bridgeTransport",null),s0(this,"bridgeSignal"),s0(this,"bridgeResolve",null),s0(this,"bridgeReject",null),s0(this,"serverMessageCount",0),s0(this,"settled",!1),s0(this,"abortHandler",null),s0(this,"connectTimeout"),s0(this,"writeQueue",[]),s0(this,"isProcessingQueue",!1),s0(this,"queueAborted",!1),s0(this,"queueDrainPromise",Promise.resolve()),s0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,r){return`wss://${A}/uto/1/sync/${r}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await C8(this.bridgeTransport,A)}catch(r){let e=r instanceof Error?r.message:String(r);this.logger.error(`Error writing to transport: ${e}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,r){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(r))}attachWebSocketHandlers(A,r){let e=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${r}`),this.transportUnsubscribe=this.bridgeTransport.onData(e),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${r}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${r})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,r,e,t){return new Promise((a,s)=>{if(t?.aborted){s(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=a,this.bridgeReject=s;let l=U8.buildSyncUrl(r,e);this.logger.info(`Opening WebSocket: ${l}`);let B=new WebSocket(l);B.binaryType="arraybuffer",this.ws=B,this.connectTimeout=setTimeout(()=>{B.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),B.close(),this.settle("reject",new Error("WebSocket connection timeout")))},ED),this.attachWebSocketHandlers(B,r)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},H8="https://lic.mydatanet.at/api/2/";async function J8(x,A=H8){let r=`${A}devices/${x}/assignment`,e=await fetch(r);if(!e.ok)throw new Error(`Failed to get device assignment: ${e.status} ${e.statusText}`);return e.json()}var K8=class extends fD.EventEmitter{constructor(x=Dr){super(),s0(this,"logger",x)}async execute(x,A,r,e){let t=r;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await J8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let a=new Hi(this.logger);a.on("wsConnected",()=>this.emit("wsConnected")),a.on("wsClosed",(l,B)=>this.emit("wsClosed",l,B)),a.on("wsError",l=>this.emit("wsError",l)),a.on("serverMessage",l=>this.emit("serverMessage",l));let s=await a.bridge(x,t,A,e);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+s.serverMessageCount+")"),{serverMessageCount:s.serverMessageCount}}},BD=require("events"),z8="Operation aborted";function cD(x){return x instanceof Error?x.message:String(x)}function ri(x){if(x?.aborted)throw new Error(z8)}var V8=class extends BD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"atHandler",x),s0(this,"logger",A)}async execute(x,A,r,e){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:s=>this.atHandler.queryMntServerConfig(s),initiateSync:s=>this.atHandler.initiateMntSync(s)},{name:"mdn",queryServer:s=>this.atHandler.queryMdnServerConfig(s),initiateSync:s=>this.atHandler.initiateMdnSync(s)}],a={};for(let s of t)try{a[s.name]=await this.runSyncPhase(s,x,A,e)}catch(l){if(e?.aborted)throw new Error(z8);let B=`${s.name.toUpperCase()} sync phase failed: ${cD(l)}`;throw this.logger.error(B),new Error(B)}return this.logger.info(`Debug sync completed (mntMessages=${a.mnt}, mdnMessages=${a.mdn})`),{mntServerMessageCount:a.mnt,mdnServerMessageCount:a.mdn}}async runSyncPhase(x,A,r,e){ri(e);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let a=await x.queryServer(e);this.logger.info(`${t} server domain: ${a}`),ri(e),await x.initiateSync(e),ri(e);let s=await this.syncWithServer(A,a,r,e);return this.logger.info(`${t} phase completed (serverMessages=${s.serverMessageCount})`),s.serverMessageCount}async syncWithServer(x,A,r,e){let t=new Hi(this.logger),a=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let s=this.atHandler.createConCloseMonitor(()=>{a=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let l=await t.bridge(x,A,r,e);return a?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(e)),l}finally{s()}}},CD=class extends vD.EventEmitter{constructor(x,A,r=Dr){super(),s0(this,"syncTransport",x),s0(this,"logger",r),s0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(r){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(r instanceof Error?r.message:String(r))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(r){throw this.emit("syncError",r),r}}async syncLegacy(x){let A=new K8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",e),e}async syncWithDebug(x){let A=new V8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),e={mode:"debug",serverMessageCount:r.mntServerMessageCount+r.mdnServerMessageCount,mntServerMessageCount:r.mntServerMessageCount,mdnServerMessageCount:r.mdnServerMessageCount};return this.emit("syncComplete",e),e}dispose(){}},dD=require("events"),Gx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},rx={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},FA=1e4,W8=9e4,X8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function Y8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var we="Operation aborted",sA=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Ji=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},DD=class extends dD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"transport",x),s0(this,"logger",A),s0(this,"mutex",new Si("AtCommandHandler")),s0(this,"bufferState",Y8()),s0(this,"responseCallback",null),s0(this,"decoder",new TextDecoder),s0(this,"dataHandler"),s0(this,"disposeTransportListener"),s0(this,"isDisposed",!1),s0(this,"activeAbort",null),s0(this,"session"),this.dataHandler=r=>this.handleIncomingData(r),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(r,e,t=FA,a)=>this.executeSendAndWait(r,e,t,a),sendRaw:(r,e=FA)=>this.executeSendRaw(r,e),queryMntServerConfig:r=>this.executeQueryConfig(Gx.MNT_CFG,rx.MNT_CFG_PREFIX,r),queryMdnServerConfig:r=>this.executeQueryConfig(Gx.MDN_CFG,rx.MDN_CFG_PREFIX,r),initiateMntSync:r=>this.executeInitiateMntSync(r),initiateMdnSync:r=>this.executeInitiateMdnSync(r),sendCompanionCert:(r,e)=>this.executeSendCompanionCert(r,e),queryCompanionCertSupport:r=>this.executeQueryCompanionCertSupport(r),sendConnectionClose:r=>this.executeSendConnectionClose(r)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new sA;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let r=0;r<x.length;r++)A[r]=x.charCodeAt(r);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,r){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&r&&A.removeEventListener("abort",r)}}makeResponseChecker(x,A,r,e){let t=x instanceof RegExp;return a=>{if(x!==rx.ERROR&&a.includes(rx.ERROR)){A(),e(new Ji);return}let s=!1,l=a;if(t){let B=a.match(x);B&&(s=!0,l=B[0])}else s=a.includes(x);if(s){A(),r(l);return}a.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,r,e){return new Promise((t,a)=>{if(this.isDisposed){a(new sA);return}if(e?.aborted){a(new Error(we));return}x&&(this.bufferState.buffer="");let l=A instanceof RegExp?A.source:A,B={cleanup:()=>{}},D=setTimeout(()=>{B.cleanup(),a(new Error(`Timeout waiting for response: ${l}`))},r),p=()=>{B.cleanup(),a(new Error(we))};B.cleanup=this.makeCleanup(D,e,p),e&&e.addEventListener("abort",p);let j=this.makeResponseChecker(A,B.cleanup,t,a);this.responseCallback=j,this.activeAbort=()=>{B.cleanup(),a(new sA)},!x&&this.bufferState.buffer&&j(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(g=>{B.cleanup(),a(g)}))})}executeSendRaw(x,A){return new Promise((r,e)=>{if(this.isDisposed){e(new sA);return}this.bufferState.buffer="";let t=setTimeout(()=>{a(),e(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),a=this.makeCleanup(t);this.activeAbort=()=>{a(),e(new sA)},this.responseCallback=s=>{X8.test(s)&&(a(),this.logger.info("RX: "+s.trim()),r(s))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(s=>{a(),e(s)})})}executeQueryConfig(x,A,r){return new Promise((e,t)=>{if(this.isDisposed){t(new sA);return}if(r?.aborted){t(new Error(we));return}this.bufferState.buffer="";let a={cleanup:()=>{}},s=setTimeout(()=>{a.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},FA),l=()=>{a.cleanup(),t(new Error(we))};a.cleanup=this.makeCleanup(s,r,l),r&&r.addEventListener("abort",l);let B=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{a.cleanup(),t(new sA)},this.responseCallback=D=>{let p=D.match(B);if(p){a.cleanup();let j=p[1].trim();this.logger.info(`Server config ${A}: ${j}`),e(j);return}D.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(D=>{a.cleanup(),this.logger.error(`Failed to send ${A} command: `+(D instanceof Error?D.message:String(D))),t(D)})})}async sendAndWait(x,A,r=FA,e){return this.withAtLock(t=>t.sendAndWait(x,A,r,e))}async sendRaw(x,A=FA){return this.withAtLock(r=>r.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(r=>r.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(Gx.MNT_SYNC,rx.OK,FA,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(Gx.MDN_SYNC,rx.OK,FA,x),await this.executeSendAndWait(null,rx.SYNC_START,FA,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new sA;if(A?.aborted)throw new Error(we);let r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),e=r.length,t=await this.executeSendAndWait(`${Gx.COMPANION_CERT}=${e}`,rx.OK,FA,A),a=parseInt(t.match(/(\d+)/)[1],10),s=0;for(;s<e;){let l=Math.min(a,e-s),B=r.slice(s,s+l);await this.executeSendAndWait(`${Gx.COMPANION_CERT}=${l},${s},${B}`,rx.OK,FA,A),s+=l}return this.executeCompanionCertFinalize(e,A)}executeCompanionCertFinalize(x,A){return new Promise((r,e)=>{if(this.isDisposed){e(new sA);return}if(A?.aborted){e(new Error(we));return}this.bufferState.buffer="";let t={cleanup:()=>{}},a=setTimeout(()=>{t.cleanup(),e(new Error("Timeout waiting for AT+COMPCERT finalize response"))},FA),s=()=>{t.cleanup(),e(new Error(we))};t.cleanup=this.makeCleanup(a,A,s),A&&A.addEventListener("abort",s),this.activeAbort=()=>{t.cleanup(),e(new sA)},this.responseCallback=B=>{let D=B.match(rx.COMPCERT_ERROR);if(D){t.cleanup(),r({success:!1,errorCode:parseInt(D[1],10)});return}if(B.includes(rx.OK)){t.cleanup(),r({success:!0});return}B.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let l=`${Gx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+l),this.transport.write(this.encodeCommand(l)).catch(B=>{t.cleanup(),e(B)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(Gx.COMPANION_CERT_TEST,rx.OK,FA,x),!0}catch(A){if(A instanceof sA)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(Gx.CON_CLOSE,rx.CON_CLOSE,FA,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",r=e=>{A+=e,A.includes(rx.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",r),()=>{this.off("data",r)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},Q8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(Q8||{}),uD=require("events"),ei="requesting-cert",ti="cert-revoked",Z8=class bi extends uD.EventEmitter{constructor(){super(...arguments),s0(this,"utoMaster",null)}async authenticate(A){let r=A.logger??qn,{signal:e,atHandler:t}=A,a=()=>{if(e?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),a();let s=await this.loadOrGenerateKeypair(A.storage),l=await A.storage.getCertificate(A.apiConfig.apiHost);(l===null||!ki(l.notAfter))&&(r.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(ei),a(),l=await this.requestAndStoreCert(s,A)),this.utoMaster=new d8(A.utoTransport,r,A.timeSource),this.emitPhase("cert-presenting"),a();let B=l;l=await t.withAtLock(async j=>{let g=await this.presentCertWithRefresh(j,B,s,A);return await j.initiateMdnSync(e),g}),this.emitPhase("ecs-handshake"),a(),await this.utoMaster.init();let D=await this.utoMaster.initiateEcsHandshake({companionPublicKey:s.publicKey,companionPrivateKey:s.privateKey,signal:e});if(!D.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${D.resultCode})`);this.emitPhase("connected");let p=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:p}}catch(s){return this.handleError(s)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let r=await A.getKeypair();if(r!==null)return r;let e=await ai();return await A.saveKeypair(e),e}static async fetchCertOrThrowRevoked(A,r){try{return await s8(r.apiConfig,{publicKey:A.publicKey,subject:r.subject})}catch(e){throw e instanceof qt&&(e.httpStatus===401||e.httpStatus===404)?(await r.storage.clearCertificate(r.apiConfig.apiHost),new ni(ti,`Companion cert revoked or session expired (HTTP ${e.httpStatus})`,{httpStatus:e.httpStatus,apiCode:e.code})):e}}async requestAndStoreCert(A,r){let e=await bi.fetchCertOrThrowRevoked(A,r),t={base64Url:e.certificateBase64Url,notAfter:e.notAfter};return await r.storage.saveCertificate(t,r.apiConfig.apiHost),t}static async refreshCertificate(A){let r=await A.storage.getKeypair(),e=r!==null?r:await(async()=>{let s=await ai();return await A.storage.saveKeypair(s),s})(),t=await bi.fetchCertOrThrowRevoked(e,A),a={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(a,A.apiConfig.apiHost),a}static async clearCredentials(A,r){await A.clearCertificate(r)}async presentCertWithRefresh(A,r,e,t){let a=await A.sendCompanionCert(r.base64Url,t.signal);if(a.success||a.errorCode===3&&((t.logger??qn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(ei),r=await this.requestAndStoreCert(e,t),a=await A.sendCompanionCert(r.base64Url,t.signal),a.success))return r;throw new ni("cert-presenting",`AT+COMPCERT rejected (code ${a.errorCode??"?"})`,{certErrorCode:a.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,r){return this.emit("phase","error"),{success:!1,phase:A,error:r}}handleError(A){return A instanceof ni?(this.emit("phase",A.phase===ti?ti:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof qt?{success:!1,phase:ei,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};s0(Z8,"encodePublicKeyBase64Url",gi);var bD=Z8,ni=class extends Error{constructor(x,A,r={}){super(A),s0(this,"phase",x),s0(this,"extra",r),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},xv=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(xv||{}),pD={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function jD(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var mD=require("events");function Av(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(r=>{let e=r.split(" ");return e.length<4?null:{name:e[0],scale:parseFloat(e[1]),offset:parseFloat(e[2]),unit:e[3]}}).filter(r=>r!==null):[]}function rv(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function ev(x,A,r){let e=parseFloat(x);return isNaN(e)?x:parseFloat(Number(e*A+r).toFixed(3)).toString()}function pi(x,A){return x.map((r,e)=>({name:r.name,displayValue:ev(A[e]??"",r.scale,r.offset),unit:r.unit}))}var hD=2e3,tv=class extends mD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"atHandler",x),s0(this,"logger",A),s0(this,"datapoints",[]),s0(this,"values",[]),s0(this,"polling",!1),s0(this,"pollTimer",null),s0(this,"fetchInProgress",!1),s0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(Gx.APP_GET_METADATA),A=x.includes(rx.OK)?{supported:!0,pinRequired:!1}:x.includes(rx.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(rx.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(rx.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${Gx.APP_GET_METADATA}=${x}`:Gx.APP_GET_METADATA,r=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+r),r.includes(rx.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(r.includes(rx.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(r.includes(rx.OK)){let e=Av(r);return this.logger.info("Parsed "+e.length+" datapoints"),this.datapoints=e,this.values=new Array(e.length).fill(""),this.emit("metadata",e),e}return r.includes(rx.ERROR)?(this.logger.error("Metadata fetch error: "+r),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let r=A?`${Gx.APP_GET_DATAVALUE}=${A}`:Gx.APP_GET_DATAVALUE,e=await x(r);if(e.includes(rx.OK)){let t=rv(e);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",pi(this.datapoints,t)),t}return[]}catch(r){return this.logger.warn("Value fetch error: "+(r instanceof Error?r.message:String(r))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(Gx.APP_TRIG_MEASURE_TEST)).includes(rx.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof sA)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:r=W8,signal:e}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let a=await t.sendRaw(Gx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+a),!a.includes(rx.OK))return this.logger.warn("Measurement trigger rejected: "+a.trim()),{outcome:"rejected",values:[],response:a};this.emit("measurementTriggered");try{let s=await t.sendAndWait(null,rx.MEASURED,r,e);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(B=>t.sendRaw(B),A),response:s}}catch(s){if(s instanceof sA)throw s;let l="timeout";return s instanceof Ji?l="error":e?.aborted&&(l="aborted"),this.logger.warn(`Measurement ${l} while waiting for ${rx.MEASURED}: `+(s instanceof Error?s.message:String(s))),this.emit("measurementFailed",l),{outcome:l,values:[],response:a}}})}async startPolling(x,A=hD){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return pi(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function gD(x,A,r){let e=a=>{if(a instanceof sA)throw a},t=new tv(x);try{let a=await x.queryMdnServerConfig(r).catch(j=>(e(j),!1)),s=await t.checkSupport().catch(j=>(e(j),{supported:!1,pinRequired:!1})),l=s.supported?await t.checkMeasurementTriggerSupport().catch(j=>(e(j),!1)):!1,B=s.supported?{pinRequired:s.pinRequired,canTriggerMeasurement:l}:!1,D=!1,p=!1;if(a){let[j,g]=await Promise.all([x.queryCompanionCertSupport(r).catch(q=>(e(q),!1)),A?.getCertificate(a)]);D=j,p=g!=null&&ki(g.notAfter)}return{hostname:a,localData:B,secureConnection:D,validCert:p}}finally{t.dispose()}}var kD=require("events"),yD={0:"trigger",1:"wakeup",2:"online"},_D={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},wD={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Wx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},SD=Wx.FAILED|Wx.ACTIVE|Wx.STARTED|Wx.RETRY|Wx.WAKEUPABLE|Wx.EXTSIM|Wx.DISABLED|Wx.WAKEUP|Wx.POSUPDATE_ACTIVE,GF=`${rx.RM2M_STATE}: `;function nv(x=0){let A=(x&Wx.WAKEUPABLE)!==0,r="offline",e=A;return x&Wx.POSUPDATE_ACTIVE?(r="locating",e=!1):x&Wx.RETRY?(r="retry",e=!1):x&Wx.STARTED?(r="dialing",e=!1):x&Wx.ACTIVE?(r="active",e=!1):x&Wx.FAILED?(r="failed",e=A):x&Wx.DISABLED&&(r="disabled",e=!1),{signal:r,simType:(x&Wx.EXTSIM)!==0?"external":"internal",wakeupable:e,unknownFlags:x&~SD}}function qD(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:yD[A]??x}function TD(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:_D[A]??["unknown",`itf#${x}`,`itf#${x}`]}function $D(x){if(x.length===0)return null;let A=x.join(",");return wD[A]??A}function sv(x){let A=x.split(","),[r,e,t,a,...s]=A;if(!r||!/^-?\d+$/.test(r)||!e||!/^\d+$/.test(e))return null;let l=parseInt(e,10),B=TD(a),D=a!==void 0?parseInt(a,10):NaN;return{stamp:new Date,rssi:D>=101?null:parseInt(r,10),state:l,uplinkState:nv(l),uplinkMode:qD(t),uplinkInterface:B?B[0]:null,uplinkInterfaceExtended:B?B[1]:null,uplinkInterfaceTechnical:B?B[2]:null,scriptState:$D(s)}}function iv(x){let A=x.indexOf(GF);if(A===-1)return null;let r=x.substring(A+GF.length),e=r.search(/\r?\n/);if(e===-1)return null;let t=r.substring(0,e).trim();return t?sv(t):null}var PD=5e3,ND=class extends kD.EventEmitter{constructor(x,A=qn){super(),s0(this,"atHandler"),s0(this,"logger"),s0(this,"lastState",null),s0(this,"pollingTimer",null),s0(this,"polling",!1),s0(this,"fetchInProgress",!1),s0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(Gx.RM2M_STATE),A=iv(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=PD){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},ID=require("events"),av=class extends ID.EventEmitter{constructor(){super(...arguments),s0(this,"serialNumber",""),s0(this,"serverUrl",""),s0(this,"deviceId",""),s0(this,"rssi",null),s0(this,"hasDebugSupport",!1),s0(this,"connectionState","disconnected"),s0(this,"connectionError",""),s0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},MD=require("events"),ov={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},LD=class extends MD.EventEmitter{constructor(x=Dr,A){super(),s0(this,"logger",x),s0(this,"state"),s0(this,"transports",null),s0(this,"transportFactory",null),s0(this,"disconnectFn",null),s0(this,"reconnectOptions"),s0(this,"reconnectAbortController",null),this.state=new av,this.reconnectOptions={...ov,...A}}async connect(x,A,r){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(r),this.logger.info(`Connected to device ${r.serialNumber}`),this.transports}catch(e){let t=e instanceof Error?e.message:String(e);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),e}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),r=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${r}ms...`),await this.sleep(r,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(e){this.logger.warn(`Reconnect attempt failed: ${e}`),r=Math.min(r*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(r=>{let e=setTimeout(r,x);A?.addEventListener("abort",()=>{clearTimeout(e),r()},{once:!0})})}},RD={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},OD={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},GD=590,UD=3e4,M0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},$A=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Hn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Ki=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function PA(x){try{return decodeURIComponent(x)}catch{throw new M0("malformed url encoding")}}var HD=2e3,JD=2136;function zi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=HD&&A<=JD}function it(x){if(x)for(let A of["stamp","from","until"]){let r=x[A];if(typeof r=="string"&&!(A==="until"&&r==="*")&&!(A!=="stamp"&&r.trim().length===0)&&!zi(r))throw new M0(`attribute '${A}' is not valid`)}}function KD(x){return typeof x.setMetadataValue=="function"?x:null}function zD(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Vi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function VD(x){return{status:200,body:x.ctx.siteInfo}}async function WD(x){let{blueprint:A}=x.ctx;if(!A)throw new $A("blueprint unavailable");return{status:200,body:A}}async function XD(x){let{me:A}=x.ctx;if(A==null)throw new $A("no profile stored");return{status:200,body:A}}function Fv(x,A,r,e){let t=x.push;t&&(async()=>{try{await t.container(A,r,e)}catch(a){x.logger?.error(`[localApi] device push for tag ${A} failed:`,a)}})()}async function YD(x,A,r){let e=x.push;if(!e)return null;try{return await e.adHocChangeRequest(A,r)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var QD=1024;function Rt(x){let A=x.indexOf(0),r=A<0?x:x.subarray(0,A);try{let e=new TextDecoder("utf-8").decode(r),t=JSON.parse(e);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function vv(x,A=0){let r=new TextEncoder().encode(x),e=Math.max(QD,A,r.length+1),t=new Uint8Array(e);return t.set(r,0),t}var Wi=26432,Ne={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},fv=Object.keys(Ne),Ot=["standby","commissioned","offline","commissioning","online"],ji=Ot.reduce((x,A)=>x|Ne[A],0)>>>0;function lv(x){let A=0;for(let r of fv)x[r]===!0&&(A|=Ne[r]);return A>>>0}function Xi(x,A){let r={};for(let e of fv)x&Ne[e]?r[e]=!0:typeof A?.[e]=="boolean"&&(r[e]=!1);return r}async function Ev(x,A){let r=A.device;if(!r)return!1;let e=await x.getRowForTag(Wi);if(!e?.data)return!1;let t=Rt(e.data);if(!t)return!1;let a=!1;if(typeof t.lifecycleFlags=="number"){let s=Xi(t.lifecycleFlags,r.lifecycle_flags);JSON.stringify(r.lifecycle_flags)!==JSON.stringify(s)&&(r.lifecycle_flags=s,a=!0)}return typeof t.lifecycleState=="string"&&r.lifecycle_state!==t.lifecycleState&&(r.lifecycle_state=t.lifecycleState,a=!0),a}var ZD=new Set([...Ot,"service","lifecycle_state"]);function xu(x,A){let r=Math.max(ex.msToStamp40((x.timeSource??Mt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=r+1,r}async function Au(x){let A=nu(x.request.body??null);if(!A)throw new M0("invalid or missing request body");ru(A);let r=x.ctx,e=r.siteInfo.lifecycle_flags;if(!tu(e))throw new M0("this site does not support lifecycle flags!");let t=lv(e),a=t;for(let D of Ot){let p=A[D];typeof p=="boolean"&&(a=p?a|Ne[D]:a&~Ne[D])}if(a>>>=0,a===t)return{status:204,body:""};let s=xu(r,x.session),l=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~ji>>>0}}),stamp40:s},{json:JSON.stringify({lifecycleFlags:{op:"|",val:a&ji}}),stamp40:s+1}],B=zD(r.storage);return B&&await B.insertUtoChangeRequests(l.map(D=>({tag:Wi,stamp40:D.stamp40,json:D.json}))),r.siteInfo.lifecycle_flags=Xi(a,e),await Bv(r),eu(r,l),{status:204,body:""}}function ru(x){let A=[];for(let[r,e]of Object.entries(x))ZD.has(r)?(r==="lifecycle_state"?typeof e!="string":typeof e!="boolean")&&A.push(`"${r}" is not valid`):A.push(`"${r}" is not an allowed lifecycle property`);if(A.length>0)throw new M0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(r=>!Ot.includes(r)))throw new M0("invalid parameters")}async function eu(x,A){try{let r=await YD(x,Wi,A);r==="executed"?await Ev(x.storage,x.siteInfo)&&await Bv(x):r!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${r})`)}catch(r){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",r)}}async function Bv(x){await KD(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function tu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function nu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function cv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new M0('"select" must be an array')}}function su(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new M0("invalid parameter, select must be an array")}}function iu(x,A){let r=new Map;if(A){for(let[e,t]of A)r.set(t,e);return r}for(let e of x?.fields??[]){if(Pr(e))continue;let t=e.alias??e.name;r.set(t,t.toLowerCase())}return r}function au(x){let A=new Map;for(let r of x.fields){if(Pr(r))continue;let e=(r.alias??r.name).toLowerCase();A.set(r.name,e),r.alias&&A.set(r.alias,e)}return A}function ou(x){let A=new Set;for(let r of x.fields)Pr(r)||A.add((r.alias??r.name).toLowerCase());return A.add("stamp"),A}function Fu(x,A,r){if(!r)return null;let e=iu(x,A),t=new Set,a=[];for(let s of r){if(s==="stamp")continue;let l=e.get(s);l?t.add(l):a.push(s)}if(a.length>0)throw Cv(a);return t}function vu(x,A){let r=au(x),e=[],t=[],a=!1;for(let s of A){if(s==="stamp"){a=!0,e.push("stamp");continue}let l=r.get(s);l?e.push(l):t.push(s)}if(t.length>0)throw Cv(t);return a||e.unshift("stamp"),e}function fu(x,A){if(A===void 0)return;let r=ou(x),e=A.map(a=>a.toLowerCase()),t=e.filter(a=>!r.has(a));if(t.length>0)throw new M0(`unknown field name(s): ${t.join(",")}`);return e.includes("stamp")?e:["stamp",...e]}function lu(x,A){if(!A)return x;let r={};for(let[e,t]of Object.entries(x))(e==="stamp"||A.has(e))&&(r[e]=t);return r}function Yi(x,A){if(!A)return x;let r={};for(let e of A)r[e]=e in x?x[e]:null;return r}function Cv(x){return new M0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Jn(x,A){return x.containers.find(r=>r.name===A||r.alias===A)??null}async function Eu(x){let A=x.ctx,r=PA(x.params[1]),e=Jn(A.model,r);if(!e)throw new M0("container does not exist");let t=await A.mapper.readContainer(r);if(!t)throw new $A(`no data for container "${r}"`);let a=cu(A,e,t,Bu(x));return{status:200,body:dv(A,r,a)}}function Bu(x){let A=x.query.json??{};return cv(A.select)}function cu(x,A,r,e){let t=Fu(A,Lt(x.blueprint??null,A),e);return lu(r,t)}function dv(x,A,r){let e=x.model.byNameOrAlias(A);return e?G8(r,Lt(x.blueprint??null,e)):r}async function Cu(x){let A=x.ctx,r=PA(x.params[1]),e=A.model.byNameOrAlias(r);if(!e)throw new $A(`unknown container "${r}"`);let t=await A.mapper.readContainer(r);if(!t)throw new $A(`unknown container "${r}"`);let a=x.query.json??{},s=su(a.select),l=fu(e,s);return{status:200,body:Yi(t,l)}}async function du(x){let A=PA(x.params[1]);return Dv(x,A,"canonical")}async function Du(x){let A=PA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new $A(`unknown container "${A}"`);return Dv(x,A,"legacy")}async function Dv(x,A,r){let e=hu(x);if(!e)throw new M0("invalid or missing request body");it(e);let{stamp:t,...a}=e;if(r==="canonical"&&t!==void 0&&typeof t!="string")throw new M0("value(s) of field(s) stamp are not valid");let s=x.ctx;if(r==="canonical"&&!Jn(s.model,A))throw new M0("container does not exist");let l=s.model.byNameOrAlias(A);if(l?.kind==="histdata")throw new $A(`unknown container "${A}"`);let B=r==="canonical"?pu(s,l,a):ju(l,a);try{let D=r==="canonical"&&t!==void 0?{...B,stamp:t}:B,p=await s.mapper.writeContainer(A,D);return p.devicePushable&&Fv(s,p.tag,p.data,p.stamp40),{status:204,body:""}}catch(D){throw uu(D,A,r,s,l)}}function uu(x,A,r,e,t){if(x instanceof Pt){let a=x.field?bu(e,t,x.field,r):void 0;return r==="canonical"?a?new M0(`no permission to modify container field \`${a}\``):new M0(`no permission to modify container \`${A}\``):a?new Hn(`unknown field name(s): ${a}`):new Ki(`no permission to modify '${A}'`)}return x}function bu(x,A,r,e){if(!A)return r;let t=A.fields.find(s=>s.name===r||s.name.toLowerCase()===r||(s.alias??s.name).toLowerCase()===r);return t?e==="legacy"?(t.alias??t.name).toLowerCase():Lt(x.blueprint??null,A)?.get(r)??t.alias??t.name:r}function pu(x,A,r){if(!A)return r;let e=Lt(x.blueprint??null,A),t=new Map;if(e)for(let[a,s]of e)t.set(s,a);else for(let a of A.fields){let s=a.alias??a.name;t.set(s,s.toLowerCase()),t.set(s.toLowerCase(),s.toLowerCase())}return uv(A,t,r,a=>new M0(`unknown field name(s): ${a}`))}function ju(x,A){if(!x)return A;let r=new Map;for(let e of x.fields){let t=e.alias??e.name;r.set(t.toLowerCase(),t.toLowerCase()),r.set(t,t.toLowerCase())}return uv(x,r,A,e=>new Hn(`unknown field name(s): ${e}`))}var mu=new Set(["stamp","stamp4","stamp8","datetime"]);function uv(x,A,r,e){let t=new Map(x.fields.map(B=>[(B.alias??B.name).toLowerCase(),B])),a={},s=[],l=[];for(let[B,D]of Object.entries(r)){let p=A.get(B);if(!p){s.push(B);continue}let j=t.get(p);if(j&&mu.has(j.type)&&!(typeof D=="string"&&zi(D))){l.push(B);continue}a[p]=D}if(s.length>0)throw e(s.join(","));if(l.length>0)throw new M0(`value(s) of field(s) ${l.join(",")} are not valid`);return a}function hu(x){let A=x.query.json,r=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,e=x.request.body;if(!e)return r?{...r}:null;let t=gu(e);if(t===void 0)throw new M0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...r,...t}}function gu(x){try{return JSON.parse(x)}catch{return}}var bv="x-mt-backfill",pv="pending";async function Qi(x,A,r){let e=x.push?.backfill;if(!(!e||A===void 0||A===null||r===null))try{return await e.call(x.push,{fromMs:r})==="pending"?{[bv]:pv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var ku=1e3,hn=1e3,jv="20000101",mv="*";async function yu(x){let A=x.query.json??{};wv(A,["from","until","count","offset","select"]),it(A);let r=x.ctx,e=PA(x.params[1]),{mapperSelect:t,order:a}=gv(r,e,A.select);kv(r,e);let s=Ln(A.from,jv,"from"),l=Ln(A.until,mv,"until");yv(s,l),l!==null&&(l=wu(l));let B=Su(A.count),D=_v(A.offset),p=await Qi(r,A.from,s);return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:s,untilMs:l,count:B,offset:D,select:t})).map(g=>hv(x,r,e,Yi(g,a))),headers:p}}async function _u(x){let A=x.query.json??{};wv(A,["from","until","offset","select"]),it(A);let r=x.ctx,e=PA(x.params[1]),t=x.params[2],{mapperSelect:a,order:s}=gv(r,e,A.select);kv(r,e);let l=Ln(A.from,jv,"from"),B=Ln(A.until,mv,"until");yv(l,B);let D=_v(A.offset),p=await Qi(r,A.from,l),g=(await r.mapper.readTimeseries(e,{fromMs:l,untilMs:B,count:t==="youngest"?-1:1,offset:D,select:a}))[0];return g?{status:200,body:hv(x,r,e,Yi(g,s)),headers:p}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:p}}function hv(x,A,r,e){return x.apiVersion==="1"?e:dv(A,r,e)}function gv(x,A,r){let e=cv(r);if(!e)return{mapperSelect:void 0,order:null};let t=Jn(x.model,A);if(!t)return{mapperSelect:e,order:null};let a=vu(t,e),s=a.filter(l=>l!=="stamp");return{mapperSelect:s.length>0?s:void 0,order:a}}function kv(x,A){if(!Jn(x.model,A))throw new M0("timeseries does not exist")}function Ln(x,A,r){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return st(t)}catch{throw new M0(`attribute '${r}' is not valid`)}}function yv(x,A){if(x!==null&&A!==null&&x>A)throw new M0('E_BAD_REQUEST "from" value must be older than "until"')}function wu(x){let A=ex.msToStamp40(x);return ex.stamp40ToMS(A)>=x&&(A-=1),ex.stamp40ToMS(A)}function Su(x){if(x==null||x==="")return ku;let A=Number(x);if(!Number.isInteger(A))throw new M0('"count" must be an integer');if(A===0)throw new M0("`count` cannot be 0");if(A<-hn)throw new M0(`"count" must be greater than or equal to -${hn}`);if(A>hn)throw new M0(`"count" must be less than or equal to ${hn}`);return A}function _v(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new M0('"offset" must be an integer');if(A<0)throw new M0('"offset" must be greater than or equal to 0');return A}function wv(x,A){for(let r of Object.keys(x))if(!A.includes(r))throw new M0(`"${r}" is not allowed`)}var qu=1e5,Tu="20000101",$u="*";async function Pu(x){let r=`histdata${x.params[1]?Number(x.params[1]):0}`,e=x.ctx,t=e.model.byNameOrAlias(r);if(!t)throw new $A(`unknown container "${r}"`);let a=x.query.json??{};it(a);let{fromMs:s,untilMs:l}=Mu(a);Lu(s,l);let B=Ru(a),D=Ou(a),p=Sv(t,a.select)??["stamp"],j=Rn(a.from)?await Qi(e,a.from,s):void 0,g=p.filter(P=>P!=="stamp");return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:s,untilMs:l,count:B,offset:D,select:g.length>0?g:void 0})).map(P=>p.map(T=>T==="stamp"?P.stamp:P[T]??null)),headers:j}}async function Nu(x){let r=`histdata${x.params[1]?Number(x.params[1]):0}`,e=x.params[2],t=x.ctx,a=t.model.byNameOrAlias(r);if(!a)throw new $A(`unknown container "${r}"`);let s=x.query.json??{};it(s);let l=Sv(a,s.select)??["stamp"],B=Iu(s),D=l.filter(g=>g!=="stamp"),j=(await t.mapper.readTimeseries(r,{fromMs:null,untilMs:B??null,count:B!==void 0||e==="youngest"?-1:1,select:D.length>0?D:void 0}))[0];return j?{status:200,body:[l.map(g=>g==="stamp"?j.stamp:j[g]??null)]}:{status:200,body:[]}}function Iu(x){if(!(!Rn(x.until)||x.until==="*"))try{return st(String(x.until))??void 0}catch{throw new M0("from or until value invalid")}}function Mu(x){let A=Rn(x.from),r=Rn(x.until);if((!A||!r)&&!Zi(x.count))throw new M0("missing or invalid parameters (from and until and/or count)");return{fromMs:UF(A?x.from:Tu),untilMs:UF(r?x.until:$u)}}function Lu(x,A){if(x!==null&&A!==null&&x>A)throw new M0('"from" value must be older than "until"')}function UF(x){let A=String(x);try{return st(A)}catch{throw new M0(`invalid stamp "${A}"`)}}function Ru(x){if(!Zi(x.count))return qu;if(typeof x.count!="number")throw new M0("invalid parameter count");return x.count}function Ou(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new M0("invalid parameter offset");return A}function Sv(x,A){if(A==null)return;if(!Array.isArray(A))throw new M0("invalid parameter, select must be an array");let r=A.map(l=>String(l).toLowerCase()),e=r.filter(l=>l.includes(" "));if(e.length>0)throw new M0(`aggregation suffix not allowed: ${e.join(",")}`);let t=r.includes("stamp")?r:["stamp",...r],a=new Set(x.fields.filter(l=>!Pr(l)).map(l=>(l.alias??l.name).toLowerCase()));a.add("stamp");let s=t.filter(l=>!a.has(l));if(s.length>0)throw new M0(`invalid channel(s) ${s.join(",")}`);return t}function Zi(x){return!!x}function Rn(x){return typeof x=="string"?x.trim().length>0:Zi(x)}var Gu="device_id";function Uu(x){return async A=>(await Kn(A),{status:200,body:await Ju(A.ctx,x)})}async function Kn(x){let A=PA(x.params[0]),r=await Hu(x.ctx);if(!r||r.toLowerCase()!==A.toLowerCase())throw new $A(`unknown device "${A}"`)}async function Hu(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(Gu)}async function Ju(x,A){let r=await x.storage.getRowForTag(A);if(!r||!r.data)return{};let e=Rt(r.data);return e?(typeof e.pipAppVer=="number"&&(e.pipAppVer=`${e.pipAppVer}.0.0`),e.stamp=tt(ex.stamp40ToMS(dr(r.stamp))),e):{}}function xa(x,A,r){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(r);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function Ku(x){return async A=>{await Kn(A);let r=Wu(A.request.body??null);if(!r)throw new M0("invalid or missing request body");return xa(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x),t=e?.data?Rt(e.data)??{}:{};return await Aa(A.ctx,x,e,{...t,...r}),{status:204,body:""}})}}function zu(x){return async A=>(await Kn(A),xa(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);return!r||!r.data?{status:204,body:""}:(await Aa(A.ctx,x,r,{}),{status:204,body:""})}))}function Vu(x){return async A=>{await Kn(A);let r=PA(A.params[1]);return xa(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);if(!e||!e.data)return{status:204,body:""};let t=Rt(e.data)??{},a=r.toLowerCase();for(let s of Object.keys(t))s.toLowerCase()===a&&delete t[s];return await Aa(A.ctx,x,e,t),{status:204,body:""}})}}function Wu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Aa(x,A,r,e){let t=vv(JSON.stringify(e),r?.data?.length??0),a=ex.msToStamp40((x.timeSource??Mt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:TA(a),flags:r?.flags??0,site_related:r?.site_related??0,data:t}),Fv(x,A,t,a)}var qv={"content-type":"application/json"},Xu=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:XD,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:VD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:WD,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Au,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:_u,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:yu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Eu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:du,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Nu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Pu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Cu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Du,checksUid:!0},...Yu()];function Yu(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},r=Object.entries(x).map(([t,a])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Uu(a),checksUid:!1})),e=Object.entries(A).flatMap(([t,a])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Ku(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:zu(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:Vu(a),checksUid:!1}]);return[...r,...e]}var Qu=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function Zu(x){let A=Vi();return r=>Tv(x,r,A)}async function Tv(x,A,r=Vi()){try{let[e,t]=r7(A.path),a=e7(t),s=A7(e,x);if(s===null)return Pe(404,"E_NOT_FOUND","unknown customer");let l=A.method.toUpperCase();for(let B of Xu){if(B.method!==l)continue;let D=B.pattern.exec(s);if(!D)continue;let p=D.slice(1);if(B.checksUid&&!x7(x,p[0]))return Pe(404,"E_NOT_FOUND","unknown site");let j=/^\/api\/([12])\//.exec(s)?.[1]??"1",g=await B.handler({request:A,params:p,query:a,ctx:x,session:r,apiVersion:j});return s7(g)}return Pe(404,"E_NOT_FOUND","not found")}catch(e){return Pv(e)}}function x7(x,A){return x.allowAnySiteUid===!0||A!==void 0&&PA(A)===x.siteUid}function A7(x,A){let r=Qu.exec(x);if(!r)return x;let e=PA(r[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===e||(A.siteInfo.customer_uid??"").toLowerCase()===e?`/api/${r[1]}/sites/${r[3]}`:null}function r7(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function e7(x){let A={params:{}};if(!x)return A;for(let r of x.split("&"))r&&t7(A,r);return A}function t7(x,A){let r=A.indexOf("="),e=PA(r<0?A:A.slice(0,r)),t=r<0?"":PA(A.slice(r+1));e==="json"?x.json=n7(t):x.params[e]=t}function n7(x){try{return JSON.parse(x)}catch{throw new M0("request supplied data which is not json formatted ")}}function s7(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...qv,...x.headers},body:A}}function $v(x,A){return{status:x,headers:{...qv},body:JSON.stringify(A)}}function Pv(x){return x instanceof M0||x instanceof Ui||x instanceof $i?Pe(400,"E_BAD_REQUEST",x.message):x instanceof Hn||x instanceof Pt?Pe(403,"E_FORBIDDEN",x.message):x instanceof Ki?Pe(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof $A||x instanceof te?Pe(404,"E_NOT_FOUND",x.message):$v(500,{err:x instanceof Error?x.message:String(x)})}function Pe(x,A,r){return $v(x,{err:`${A} ${r}`})}function i7(x,A){let r=A.apmId??"local",e=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:r,customer_uid:r,app:{apmid:r,version:String(e)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var P6={};gl(P6,{APM:()=>S0,DDE:()=>SA,DDE_Core:()=>X0,DFILES:()=>yt,DLO:()=>kt,DefaultFiles:()=>o0,Dependencies:()=>Bx,DevError:()=>kx,DevExitCode:()=>Gt,DevSession:()=>Re,DeviceProfiles:()=>Zt,Diagnostics:()=>lt,ENV:()=>Hs,Globals:()=>yx,Helper:()=>T0,HttpMethod:()=>ua,Library:()=>ge,Log:()=>Tr,Manifest:()=>Z,MyDatanetClient:()=>ts,Package:()=>Nx,Registry:()=>ux,build:()=>S6,buildDevelopmentInstallInfo:()=>Sf,dev:()=>kf,generateDevApmId:()=>ba,install:()=>w6,pack:()=>$6,publish:()=>T6});module.exports=kl(P6);var hx=require("vscode-uri");var xt=require("vscode-uri");var yl=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Vt(x,A=0){let r=~~A^-1;for(let e=0;e<x.length;e++)r=r>>>8^yl[(r^x[e])&255];return(r^-1)>>>0}var M6=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),L6=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var T0;(q=>{function x(S,P){let[T,M]=P,{line:N,col:z}=S.linePos(T);return{line:Number(N)-1,startCharacter:z-1,endCharacter:z+(M-T)}}q.yamlRangeToLineInformation=x;let A=new TextEncoder;function r(S){return Vt(A.encode(S)).toString(16)}q.generateHashForLibraryName=r;function e(S){return Vt(A.encode(S)).toString(16)}q.generateHashForFilePath=e;function t(S){return Vt(S).toString(16).toUpperCase().padStart(8,"0")}q.generateCRC32ForFileContent=t;function a(S){try{let P=null;return S?.type==="Buffer"?P=Uint8Array.from(S.data):P=S,new TextDecoder("utf8").decode(P)}catch{return""}}q.convertBlobToString=a;function s(S=""){return S.replace(/\r\n|\n\r|\r/g,`
|
|
2633
|
+
`).entries()){A.line=r;let t=e.trim();t===""||t.startsWith("//")||Md(A,t)||t.includes("=")&&Ld(A,t)}return Id(A.containers,A.splits)}var $8=null,Od=4;function tt(x){let A=new Date(x),r=(e,t)=>e.toString().padStart(t,"0");return r(A.getUTCFullYear(),4)+r(A.getUTCMonth()+1,2)+r(A.getUTCDate(),2)+r(A.getUTCHours(),2)+r(A.getUTCMinutes(),2)+r(A.getUTCSeconds(),2)+r(A.getUTCMilliseconds(),3)}function st(x){let A=x.trim();if(A==="*")return $8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let r=(b,j,g)=>{let q=A.slice(b,b+j);return parseInt(q.length?q.padEnd(j,"0"):g,10)},e=parseInt(A.slice(0,Od),10),t=A.length>=6?r(4,2,"01"):1,a=A.length>=8?r(6,2,"01"):1,s=r(8,2,"00"),l=r(10,2,"00"),E=r(12,2,"00"),D=r(14,3,"000");return Date.UTC(e,t-1,a,s,l,E,D)}var Pt="NAN",Gd="%HEX%",Ud=65535,Ni=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),s0(this,"alias",x),this.name="DdeUnknownAliasError"}};function Hn(x){return(x.alias??x.name).toLowerCase()}function Kn(x){return x==="string"}function Ii(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function P8(x){return(x.editmask??"").toUpperCase()===Gd}function Hd(x,A){return A===void 0||!Number.isFinite(x)?x:Mi(x,A)}function Mi(x,A){if(!Number.isFinite(x))return x;let r=10**A;return Math.sign(x)*Math.round(Math.abs(x)*r)/r}function Kd(x,A){if(!Number.isFinite(x)||x===0)return x;let r=Math.abs(x),e=Math.floor(Math.log10(r));return 10**(e+1)<=r?e+=1:10**e>r&&(e-=1),Mi(x,A-1-e)}function Jd(x){return x==="floatm16"||x==="f32"||x==="f64"}function zd(x,A){if(!Number.isFinite(A))return A;let r=x.decpl??(Jd(x.type)?9:0),e=Mi(A,r),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return Kd(e,t)}function In(x,A){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),e=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,a=1n;for(;e!==0n;)e&1n&&(r&1n&&(t|=a),a<<=1n),r>>=1n,e>>=1n;return Number(t)}function N8(x,A,r){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),a=BigInt.asUintN(64,BigInt(Math.trunc(r))),s=1n;for(;a!==0n;)a&1n&&(e=t&1n?e|s:e&~s,t>>=1n),a>>=1n,s<<=1n;return Number(e)}var Vd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Mn(x){return!!x.bitmask&&Vd.has(x.type)}var I8=255,M8=254,L8=253,R8=252,O8=251,Wd=207,Li=65535,Ln=65534,Ri=65533,Oi=65532,Gi=65531;function Xd(x){switch(x){case I8:return Li;case M8:return Ln;case L8:return Ri;case R8:return Oi;case O8:return Gi;default:return x<=31?x:x>Wd?Ln:(x&15|16)<<(x>>4)-1}}function Yd(x){switch(x){case Li:return I8;case Ln:return M8;case Ri:return L8;case Oi:return R8;case Gi:return O8;default:{if(x<=31)return x;let A=1,r=x;for(;(r&65504)>0;)r>>=1,A++;return A<<4|r&15}}}var Rn=1023,ci=31,G8=127,Ys=8388607,Qd=255,Ci=15,Zd=-14,UF=15;function U8(x){let A=(x&Rn)<<13,r=(x&31744)>>10;if(r===ci)return K8(1024-(x&Rn));r!==0&&(r=r-Ci+4+G8);let e=(A|r<<23)>>>0;x&32768&&(e=(e|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,e),t.getFloat32(0)}function H8(x){if(typeof x=="string"||Number.isNaN(x))return Ud;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let r=A.getUint32(0),e=r>>>16&32768,t=(r&Ys)+4096,a=(t>Ys?1:0)+(r>>>23&Qd),s=(t&Ys)>>>13;return a!==0&&(a=a-G8-4,a<Zd?(s=0,a=0):a>UF?(s=Rn,a=UF+Ci):a=a+Ci),e|a<<10|s}var xD=["OF","UF","OL","SC"],di={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:Li,OF:Ln,UF:Ri,OL:Oi,SC:Gi}},AD={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},vA={NAN:1,OF:2,UF:3,OL:4,SC:5},rD=new Set(["u8","u16","u32","ufm8"]);function eD(x){let A=Math.floor(x),r=x-A;return r<.5?A:r>.5?A+1:A%2===0?A:A+1}function Ui(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let r=Number(A);return Number.isFinite(r)?r:null}function Hi(x,A,r){switch(x){case"u8":return A.getUint8(r);case"s8":return A.getInt8(r);case"u16":return A.getUint16(r,!1);case"s16":return A.getInt16(r,!1);case"u32":return A.getUint32(r,!1);case"s32":return A.getInt32(r,!1);case"s64":return Number(A.getBigInt64(r,!1));case"f32":return A.getFloat32(r,!1);case"f64":return A.getFloat64(r,!1);case"floatm16":return U8(A.getUint16(r,!1));case"ufm8":return Xd(A.getUint8(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function K8(x){switch(x){case vA.OF:return"OF";case vA.UF:return"UF";case vA.OL:return"OL";case vA.SC:return"SC";default:return Pt}}var HF=[["NAN",vA.NAN],["OF",vA.OF],["UF",vA.UF],["OL",vA.OL],["SC",vA.SC]];function tD(x,A){let r=x.getUint32(A,!1);if((r&2139095040)!==2139095040)return 0;let e=r&8388607;return e===0?vA.NAN:(e=e&4194304?8388608-e:e&255,e===0?vA.NAN:e)}function nD(x,A){let r=x.getBigUint64(A,!1);if((r&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let e=Number(r&0xffn);return e===0?vA.NAN:e}function sD(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Mn(x)&&(t=BigInt(In(Number(t),x.bitmask)));let a=di.s64;return HF.find(([s])=>t===BigInt(a[s]))?.[1]??0}let r=di[x.type];if(!r)return 0;let e=Hi(x.type,A,x.byteofs);return Mn(x)&&(e=In(e,x.bitmask)),HF.find(([t])=>e===r[t])?.[1]??0}function J8(x,A){switch(x.type){case"floatm16":{let r=A.getUint16(x.byteofs,!1);return(r>>10&ci)===ci?1024-(r&Rn):0}case"f32":return tD(A,x.byteofs);case"f64":return nD(A,x.byteofs);default:return sD(x,A)}}function z8(x,A){let r=Hi(x.type,A,x.byteofs);return typeof r=="string"||Number.isNaN(r)?NaN:(Mn(x)&&(r=In(r,x.bitmask)),r*x.vscale+x.vofs)}function iD(x,A){let r=J8(x,A);if(r!==0)return K8(r);let e=z8(x,A);return Number.isNaN(e)?Pt:zd(x,e)}function aD(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Kn(x.type)||Ii(x.type))return NaN;let r=new DataView(A.buffer,A.byteOffset,A.byteLength);return J8(x,r)!==0?NaN:z8(x,r)}function oD(x,A){if(P8(x)){let r="";for(let e=0;e<x.size;e++)r+=A.getUint8(x.byteofs+e).toString(16).padStart(2,"0");return r.toUpperCase()}return ex.cp1252Unpack(A,x.byteofs,x.size)}var V8=25569,W8=864e5;function FD(x){return(x-V8)*W8}function vD(x){return x/W8+V8}function fD(x,A){if(x.type==="datetime")return tt(FD(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let e=A.getBigUint64(x.byteofs,!1),t=Number(e&0xffffffffffn);return tt(ex.stamp40ToMS(t))}let r=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(r+=A.getUint8(x.byteofs+4)),tt(ex.stamp40ToMS(r))}var lD=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function ED(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function BD(x){let A=x.default;if(A===void 0)return;if(Kn(x.type))return A;let r=A.trim();if(r===""||r.toUpperCase()===Pt)return Pt;if(lD.has(x.type))return ED(r,0);let e=Ui(r);return e!==null?e:A}function cD(x,A,r){return x.byteofs+x.size>r?BD(x):Kn(x.type)?oD(x,A):Ii(x.type)?fD(x,A):iD(x,A)}function Di(x,A){let r=new DataView(A.buffer,A.byteOffset,A.byteLength),e={};for(let t of x.fields)Pr(t)||$t(t.type)||(e[Hn(t)]=cD(t,r,A.byteLength));return e}function CD(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===Pt||A==="")return{kind:"sentinel",state:"NAN"};let r=xD.find(t=>t===A);if(r)return{kind:"sentinel",state:r};if("OUS".includes(A[0]))return{kind:"skip"};let e=Ui(A);return e!==null?{kind:"value",physical:e}:KF(x)}return KF(x)}function KF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Ui(A):null)??0}}function ui(x,A,r){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,AD[r],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|vA[r])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(vA[r]),!1);default:break}let e=di[x.type]?.[r];if(e===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(e),!1);X8(x,A,Number(e))}function dD(x,A,r){if(x.vscale===0)return;let e=(r-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,e,!1);case"f64":return A.setFloat64(x.byteofs,e,!1);case"floatm16":return A.setUint16(x.byteofs,H8(e),!1);default:break}if(Number.isNaN(e))return ui(x,A,"NAN");if(!Number.isFinite(e))return ui(x,A,"OF");let t=e;rD.has(x.type)&&t<0&&(t=0),X8(x,A,eD(t))}function X8(x,A,r){if(Mn(x)){let e=Hi(x.type,A,x.byteofs);r=N8(e,r,x.bitmask)}DD(x.type,A,x.byteofs,r)}function DD(x,A,r,e){switch(x){case"u8":return A.setUint8(r,e);case"s8":return A.setInt8(r,e);case"u16":return A.setUint16(r,e,!1);case"s16":return A.setInt16(r,e,!1);case"u32":return A.setUint32(r,e,!1);case"s32":return A.setInt32(r,e,!1);case"s64":return A.setBigInt64(r,BigInt(e),!1);case"ufm8":return A.setUint8(r,Yd(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function uD(x,A,r){let e=String(r);if(P8(x)){let t=e.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${Hn(x)}"`);for(let a=0;a<x.size;a++){let s=a*2<t.length?parseInt(t.substr(a*2,2),16):0;A.setUint8(x.byteofs+a,s)}return}ex.cp1252Pack(A,x.byteofs,x.size,e)}function pD(x,A,r){let e=st(String(r));if(e===null)throw new Error(`?ddeCodec.unbounded-stamp."${Hn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,vD(e),!1);return}let t=ex.msToStamp40(e);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function bD(x,A,r){if(Kn(x.type))return uD(x,A,r);if(Ii(x.type))return pD(x,A,r);let e=CD(x,r);switch(e.kind){case"skip":return;case"sentinel":return ui(x,A,e.state);case"value":return dD(x,A,e.physical)}}function pi(x,A,r){let e=r?new Uint8Array(r):new Uint8Array(x.recordSize),t=new DataView(e.buffer,e.byteOffset,e.byteLength),a=new Map(x.fields.filter(s=>!Pr(s)&&!$t(s.type)).map(s=>[Hn(s),s]));for(let[s,l]of Object.entries(A)){let E=a.get(s.toLowerCase());if(!E)throw new Ni(s);bD(E,t,l)}return e}var JF=99,jD=256,te=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),s0(this,"container",x),this.name="DdeUnknownContainerError"}},Nt=class extends Error{constructor(x,A){let r=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${r}"`),s0(this,"container",x),s0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ki=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),s0(this,"field",x),this.name="DdeUnknownFieldError"}};function Qs(x){return(x.alias??x.name).toLowerCase()}var mD=class{constructor(x,A,r=Lt){s0(this,"model",x),s0(this,"storage",A),s0(this,"timeSource",r)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let r=St(A);if(r===null)return null;let e=await this.storage.getRowForTag(r);if(!e||!e.data)return null;let t=Di(await this.resolveScaleRefs(A),e.data);return delete t.stamp,{stamp:this.rowStamp(e),...t}}async writeContainer(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=St(r);if(e===null)throw new te(x);if(r.edit===JF)throw new Nt(r.name);let{stamp:t,...a}=A;this.assertFieldsWritable(r,a);let s=await this.storage.getRowForTag(e),l=pi(await this.resolveScaleRefs(r),a,s?.data??null),E=ex.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),D=TA(E);return await this.storage.replaceUtoRow({tag:e,stamp:D,flags:s?.flags??0,site_related:s?.site_related??0,data:l}),{tag:e,stampHex:D,stamp40:E,data:l,devicePushable:q8(e)&&r.download!==0,upload:r.upload,download:r.download}}async seedContainer(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=St(r);if(e===null)throw new te(x);let{stamp:t,...a}=A,s=pi(await this.resolveScaleRefs(r),a,null),l=ex.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:e,stamp:TA(l),flags:0,site_related:0,data:s})}recordStampMs(x){if(typeof x!="string")return null;try{return st(x)}catch{return null}}async readTimeseries(x,A){let r=this.model.byNameOrAlias(x);if(!r)throw new te(x);let e=this.model.splits.find(D=>D.target.toLowerCase()===r.name.toLowerCase());if(!e)throw new te(x);let t=Math.abs(A.count),a=A.offset??0,s=this.buildSelectSet(r,A.select),l=await this.resolveScaleRefs(r);return(await this.collectMatched(l,e,a+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:s})).slice(a,a+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((r,e)=>x[e]===r)}async collectMatched(x,A,r,e){let t=[];if(r<=0)return t;let a=Math.max(r,jD);for(let s=0;;s+=a){let l=await this.storage.getHistoricRows(26623,{fromStamp:e.fromStamp,untilStamp:e.untilStamp,order:e.order,limit:a,offset:s});for(let E of l)if(E.data&&this.matchesSplit(E.data,A)&&(t.push(this.recordFromRow(x,E,e.selectSet)),t.length>=r))return t;if(l.length<a)return t}}async readTimeseriesEdge(x,A,r){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:r}))[0]??null}recordFromRow(x,A,r){let e=Di(x,A.data),t={stamp:this.rowStamp(A)};for(let[a,s]of Object.entries(e))a!=="stamp"&&(!r||r.has(a))&&(t[a]=s);return t}rowStamp(x){return tt(ex.stamp40ToMS(dr(x.stamp)))}boundHex(x){if(x!=null)return TA(ex.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(e=>e.vscaleRef||e.vofsRef))return x;let A=new Map,r=[];for(let e of x.fields){if(!e.vscaleRef&&!e.vofsRef){r.push(e);continue}r.push({...e,vscale:e.vscaleRef?await this.resolveRef(e.vscaleRef,A,e.vscale):e.vscale,vofs:e.vofsRef?await this.resolveRef(e.vofsRef,A,e.vofs):e.vofs})}return{...x,fields:r}}async resolveRef(x,A,r){if(!/^config[0-9a-f]$/i.test(x.container))return r;let e=this.referencedField(x);if(!e)return r;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let a=A.get(t);if(!a)return r;let s=aD(e,a);return s===null?r:s}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(e=>Qs(e)===A||e.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let r=St(A);return r===null?null:(await this.storage.getRowForTag(r))?.data??null}assertFieldsWritable(x,A){let r=new Map(x.fields.filter(e=>!Pr(e)&&!$t(e.type)).map(e=>[Qs(e),e]));for(let e of Object.keys(A)){let t=r.get(e.toLowerCase());if(t&&t.edit===JF)throw new Nt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let r=new Set(x.fields.filter(t=>!Pr(t)&&!$t(t.type)).map(t=>Qs(t))),e=new Set;for(let t of A){let a=t.toLowerCase();if(a!=="stamp"){if(!r.has(a))throw new Ki(t);e.add(a)}}return e}},hD=new Set(["$titles","$meta"]);function gD(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function bi(x,A){let r=A.toLowerCase();if(hD.has(r))return null;let e=x[r];if(typeof e!="object"||e===null)return null;let t=new Map;for(let[a,s]of Object.entries(e)){if(typeof s!="object"||s===null)continue;let l=s.alias;typeof l=="string"&&l.length>0&&t.set(a.toLowerCase(),l)}return t}function Y8(x,A){let r={};for(let[e,t]of Object.entries(x)){if(e==="stamp"){r[e]=t;continue}let a=A?.get(e.toLowerCase());r[a??e]=t}return r}function Rt(x,A){if(!x)return null;let r=bi(x,A.name);return r||(A.alias?bi(x,A.alias):null)}var kD=require("events"),W0="[OfflineSyncManager]",yD=500,_D="site_info",wD=new Set(["local-data-interface.json"]);function rA(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function SD(x){let A=Pn(x);return!!(x&2)||A!==0&&A!==65}function zF(x){return x.filter(A=>(A.filename===et||A.filename===Si)&&A.outcome==="download").map(A=>A.filename)}var _e="skip-equal",rt="skip-device-readonly",Zs="delete",re="error",xi="upload",Ai="uploading-utos",VF="downloading-utos",hn="fetching-device-state",ri="uploading-files",gn="downloading-files",WF="executing-change-requests",XF="executed",qD="error",ei="skip-old-stamp",TD=class extends kD.EventEmitter{constructor(x,A,r){super(),s0(this,"utoMaster",x),s0(this,"storage",A),s0(this,"logger",r)}emitProgress(x,A,r,e,t){let a={phase:x,item:A,completed:r,total:e,...t};this.emit("progress",a)}async uploadHistoricTag(x,A,r,e,t){try{let a=await this.storage.getRowForTag(x),s=0,l=async E=>{let D=E.filter(b=>b.stamp40>r).map(b=>({tag:x,stamp:TA(b.stamp40),flags:a?.flags??0,site_related:a?.site_related??0,data:b.data}));await this.storage.insertHistoricRows(D),s+=D.length};return await this.utoMaster.requestHistoricUtos(x,r,t,void 0,yD,l),this.logger?.info(`${W0} historic upload tag=0x${x.toString(16)} +${s} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:r,deviceStamp40:e,recordsAppended:s}}catch(a){return this.logger?.error(`${W0} historic upload error tag=0x${x.toString(16)}: ${a}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async uploadSingleTag(x,A,r,e){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${W0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:_e,dbStamp40:r,deviceStamp40:e};let a=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:TA(t.stamp),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${W0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:r,deviceStamp40:e}}catch(t){return this.logger?.error(`${W0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async uploadUtoTags(x,A,r,e){let t=x.length;this.emitProgress(Ai,null,0,t);let a=0;for(let s of x){rA(e);let l=A.get(s),{tagInfo:E,dbStamp40:D,deviceStamp40:b}=l;if(this.emitProgress(Ai,E?.sTag??`0x${s.toString(16)}`,a,t),!E||b===null)r.set(s,{tag:s,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:D,deviceStamp40:b});else if(!(!E.flags.up||b<=D)){let j=E.sTag,g=a,q=E.historic?await this.uploadHistoricTag(s,E,D,b,S=>{this.emitProgress(Ai,j,g,t,{recordsReceived:S})}):await this.uploadSingleTag(s,E,D,b);r.set(s,q)}++a}}async pullFileFromDevice(x,A,r,e,t,a){let s=A.stamp;try{let l=await this.utoMaster.requestFile(x,D=>{this.emitProgress(ri,x,a,t,{bytesTransferred:D})}),E=wi(l);if(E!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${E.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:TA(s),crc:A.crc32,size:l.byteLength,flags:A._flags,flags_int:e,data:l}),{filename:x,outcome:xi,dbStamp40:r,deviceStamp40:s}}catch(l){return this.logger?.error(`${W0} file upload error ${x}: ${JSON.stringify(l)}`),{filename:x,outcome:re,dbStamp40:r,deviceStamp40:s}}}async autoSyncUploadFile(x,A,r,e,t,a,s,l){let E=A.stamp;if(E>e)return this.fileContentMatches(A,r)?this.convergeFileStamp(x,A,r,e):a?this.pullFileFromDevice(x,A,e,t,s,l):void 0;if(E===e&&this.fileContentMatches(A,r))return{filename:x,outcome:_e,dbStamp40:e,deviceStamp40:E}}async convergeFileStamp(x,A,r,e){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:TA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:r.flags_int,data:r.data}),{filename:x,outcome:_e,dbStamp40:e,deviceStamp40:t}}catch(a){return this.logger?.error(`${W0} file upload error ${x}: ${JSON.stringify(a)}`),{filename:x,outcome:re,dbStamp40:e,deviceStamp40:t}}}async mirrorUploadFile(x,A,r,e,t,a,s){let l=A.stamp;if(l!==e||!this.fileContentMatches(A,r))return t?this.pullFileFromDevice(x,A,e,r.flags_int,a,s):{filename:x,outcome:rt,dbStamp40:e,deviceStamp40:l}}async decideFileUpload(x,A,r,e){let t=await this.storage.getFile(x),a=!!(A._flags&1);if(!t)return a?this.pullFileFromDevice(x,A,0,16,r,e):void 0;let s=dr(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,s,t.flags_int,a,r,e):this.decideNonSystemUpload(x,A,t,s,a,r,e)}pullIfReadable(x,A,r,e,t,a,s){return x?this.pullFileFromDevice(A,r,e,t,a,s):void 0}async decideNonSystemUpload(x,A,r,e,t,a,s){let l=r.flags_int;if(!(l&2))return l&4?this.pullIfReadable(t,x,A,e,l,a,s):this.decideUploadBySyncLogic(x,A,r,e,t,a,s)}async decideUploadBySyncLogic(x,A,r,e,t,a,s){let l=r.flags_int,E=Pn(l);if(E===65)return this.fileContentMatches(A,r)?this.convergeFileStamp(x,A,r,e):this.pullIfReadable(t,x,A,e,l,a,s);if(E===1)return this.autoSyncUploadFile(x,A,r,e,l,t,a,s);if(E===97)return A.stamp>e?this.pullIfReadable(t,x,A,e,l,a,s):void 0;if(E!==33)return this.mirrorUploadFile(x,A,r,e,t,a,s)}async uploadFiles(x,A,r,e){let t=Object.entries(x),a=t.length;this.emitProgress(ri,null,0,a);let s=0;for(let[l,E]of t){if(rA(e),!(l===Si||l===et&&!r)){let b=await this.decideFileUpload(l,E,a,s);b&&A.set(l,b)}this.emitProgress(ri,l,++s,a)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,r,e){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,r),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:r,deviceStamp40:e}}catch(t){return this.logger?.error(`${W0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:r,deviceStamp40:e}}}async processDownloadTag(x,A,r,e,t){if(r===e&&!t.has(x)){let a=A.flags.up?_e:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:a,dbStamp40:r,deviceStamp40:e});return}if(r>e){let a=A.flags.down?await this.downloadSingleTag(x,A,r,e):{tag:x,sTag:A.sTag,historic:!1,outcome:rt,dbStamp40:r,deviceStamp40:e};t.set(x,a)}}async downloadUtoTags(x,A,r,e){let t=x.length;this.emitProgress(VF,null,0,t);let a=0;for(let s of x){rA(e);let{tagInfo:l,dbStamp40:E,deviceStamp40:D}=A.get(s);l&&D!==null&&!l.historic&&await this.processDownloadTag(s,l,E,D,r),this.emitProgress(VF,l?.sTag??`0x${s.toString(16)}`,++a,t)}}async sendFileToDevice(x,A,r,e,t){let a=x.data.byteLength,s=l=>{if(l!==null){let E=Math.round(a*parseInt(l,10)/100);this.emitProgress(gn,x.filename,t,e,{bytesTransferred:E,bytesTotal:a})}};this.utoMaster.on("installing",s);try{return await this.utoMaster.sendFile(0,x.data,ex.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:r}}catch(l){return this.logger?.error(`${W0} file download error ${x.filename}: ${l}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:r}}finally{this.utoMaster.removeListener("installing",s)}}async processDownloadFile(x,A,r,e,t=!1){if(!x.data)return;let a=A?.stamp??0,s=dr(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return s===a?void 0:{filename:x.filename,outcome:_e,dbStamp40:s,deviceStamp40:a};if(!(!t&&s<a))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:rt,dbStamp40:s,deviceStamp40:a}:this.sendFileToDevice(x,s,a,r,e)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(_D);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${W0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,r,e){let t=await this.storage.getFiles(),a=t.filter(j=>j.flags&8),s=t.filter(j=>!(j.flags&8)),l=[...a,...s].filter(j=>j.filename),E=Object.entries(x).filter(([,j])=>j._flags&4).map(([j])=>j),D=l.length;this.emitProgress(gn,null,0,D);let b=0;for(let j of l){if(rA(e),r&&j.filename===et){this.emitProgress(gn,j.filename,++b,D);continue}let g=j.filename===et&&!r,q=await this.decideFileDownload(j,x[j.filename],A.get(j.filename),E,g,D,b);q&&A.set(j.filename,q),this.emitProgress(gn,j.filename,++b,D)}}async decideFileDownload(x,A,r,e,t,a,s){return A!==void 0?this.decideDownloadExisting(x,A,r,t,a,s):this.decideDownloadMissing(x,e,a,s)}async decideDownloadExisting(x,A,r,e,t,a){if(A._flags&4)return;if(x.flags&8)return r?void 0:this.processDownloadFile(x,A,t,a,e);let s=x.flags_int;if(s&8)return this.handleDeviceDelete(x,A,r);if(!r&&!(s&4))return this.pushToDevice(x,A,t,a)}async pushToDevice(x,A,r,e){let t=A.stamp,a=dr(x.stamp),s=this.wantDownloadPush(x,A,a,t);if(s==="match")return{filename:x.filename,outcome:_e,dbStamp40:a,deviceStamp40:t};if(s!=="none"&&!(a===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,a,t,r,e):{filename:x.filename,outcome:rt,dbStamp40:a,deviceStamp40:t}}wantDownloadPush(x,A,r,e){let t=x.flags_int;if(t&2)return"push";let a=this.fileContentMatches(A,x),s=Pn(t);return s===33||s===1&&r>=e?a?"match":"push":s===97&&r>e?"push":"none"}async handleDeviceDelete(x,A,r){let e=A.stamp,t=dr(x.stamp);if(!(r&&(r.outcome===xi||r.outcome===re))){if(!(A._flags&2))return{filename:x.filename,outcome:rt,dbStamp40:t,deviceStamp40:e};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Zs,dbStamp40:t,deviceStamp40:e}}catch(a){return this.logger?.error(`${W0} file delete error ${x.filename}: ${JSON.stringify(a)}`),{filename:x.filename,outcome:re,dbStamp40:t,deviceStamp40:e}}}}async decideDownloadMissing(x,A,r,e){let t=x.flags_int,a=dr(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Zs,dbStamp40:a,deviceStamp40:null}}catch(s){return this.logger?.error(`${W0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:re,dbStamp40:a,deviceStamp40:null}}if(!(x.flags&12)&&SD(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,a,0,r,e)}hasMatchingNode(x,A){return A.some(r=>r.slice(0,-1)===x.slice(0,r.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${W0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),r=new Set(Object.keys(A)),e=await this.storage.getFiles(),t=new Map(e.map(a=>[a.filename,a]));for(let[a,s]of Object.entries(A))rA(x),await this.reconcileDeviceFile(a,s,t.get(a)??null);for(let a of e)rA(x),r.has(a.filename)||await this.dropRowMissingFromDevice(a)}async reconcileDeviceFile(x,A,r){let e=!!((A._flags|(r?.flags??0))&8);if(r?.data&&!this.fileContentMatches(A,r)){this.logger?.info(`${W0} reconcile keep ${x}: row holds undeployed content`);return}if(!r?.data&&!e)return;let t={filename:x,stamp:TA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:r?.flags_int??16,data:this.keepBlob(x,e)?r?.data??null:null};r&&this.fileRowMatches(r,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||wD.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${W0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){rA(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${W0} requestDeviceInfo returned null`);let r=await this.storage.getMetadataValue("device_id");if(r===null){if(!A.serialNumber)throw new Error(`${W0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${W0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),r=A.serialNumber}if(r.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${W0} DB device_id "${r}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let r=0;r<x.utos.length;r++){let e=x.utos[r];A.set(e.wTag,{index:r,flags:{up:e.flags.up,down:e.flags.down,setValue:!!e.flags.setValue},historic:e.flags.historic,sTag:e.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),r=new Set(A);for(let[e,t]of x)t.historic&&!r.has(e)&&A.push(e);return A}async buildTagStampCache(x,A,r){let e=new Map;for(let t of x){let a=A.get(t),s=await this.storage.getLatestStampForTag(t),l=s?dr(s):0,E=a&&a.index<r.stamps.length?r.stamps[a.index]:null;e.set(t,{dbStamp40:l,deviceStamp40:E,tagInfo:a})}return e}async executeChangeRequests(x,A,r,e,t,a){let s=await this.storage.getUtoChangeRequests(),l=this.groupChangeRequests(s),E=l.size;if(this.emitProgress(WF,null,0,E),E===0)return;let D=new Set,b=0;for(let[j,g]of l){rA(a);let q=x.get(j),S=q?.sTag??`0x${j.toString(16)}`;this.emitProgress(WF,S,b,E),await this.executeChangeRequestTag(j,S,q,g,A,e,t,D),++b}D.size>0&&await this.repullExecutedTags(D,x,r,a)}groupChangeRequests(x){let A=new Map;for(let r of x){let e=A.get(r.tag)??[];e.push({stamp40:dr(r.stamp),user:r.user,json:r.json}),A.set(r.tag,e)}return A}async executeChangeRequestTag(x,A,r,e,t,a,s,l){if(!r){this.pushChangeResults(s,x,A,e,"unknown-tag");return}if(!r.flags.setValue){this.pushChangeResults(s,x,A,e,"skip-unsupported");return}let E=r.index<t.stamps.length?t.stamps[r.index]:0,D=e.filter(j=>j.stamp40<=E),b=e.filter(j=>j.stamp40>E);this.pushChangeResults(s,x,A,D,ei),b.length>0&&await this.coalesceAndSend(x,A,r,b,a,s,l)}async coalesceAndSend(x,A,r,e,t,a,s){let l=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===re||!l||!l.data){this.pushChangeResults(a,x,A,e,"error");return}let E=this.resolveSetObject(l.data,e,A);if(E===null){this.pushChangeResults(a,x,A,e,"error");return}if(Object.keys(E).length===0){this.pushChangeResults(a,x,A,e,"skip-no-change");return}let D=e[e.length-1].stamp40,b=await this.utoMaster.sendSetValue(x,JSON.stringify(E),D);b.outcome==="ok"||b.outcome==="stamp"?(s.add(x),this.pushChangeResults(a,x,A,e,XF,b.resultCode)):b.outcome==="denied"?(this.logger?.warn(`${W0} change-request denied ${A} (result=${b.resultCode}) \u2014 server will retry`),this.pushChangeResults(a,x,A,e,"denied",b.resultCode)):(this.logger?.error(`${W0} change-request error ${A} (result=${b.resultCode})`),this.pushChangeResults(a,x,A,e,"error",b.resultCode))}resolveSetObject(x,A,r){try{let e=JSON.parse(ex.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(e,A,r)}catch(e){return this.logger?.error(`${W0} change-request unparseable uto_data ${r}: ${e}`),null}}buildSetObject(x,A,r){let e={};for(let t of A){let a=JSON.parse(t.json);if(!this.isPlainRecord(a))throw new Error(`change-request JSON is not an object on ${r}`);for(let[s,l]of Object.entries(a)){let E=this.resolveChangeField(x[s],l,s,r);E.apply&&(e[s]=E.value,x[s]=E.value)}}return e}resolveChangeField(x,A,r,e){if(this.isBitwiseOp(A)){let{op:t,val:a}=A;return this.resolveBitwiseOp(x,t,a,r,e)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,r,e,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${W0} change-request unknown op "${A}" on ${t}.${e} \u2014 skipped`),{apply:!1}):typeof r!="number"?(this.logger?.warn(`${W0} change-request op "${A}" with non-number val on ${t}.${e} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:r}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${W0} change-request op "${A}" on non-number ${t}.${e} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|r:x&r}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,r,e,t,a){for(let s of e)x.push({tag:A,sTag:r,stamp40:s.stamp40,user:s.user,outcome:t,resultCode:a})}async repullExecutedTags(x,A,r,e){let t=null;try{t=await this.utoMaster.requestStamps()}catch(a){this.logger?.warn(`${W0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${a}`)}for(let a of x)rA(e),await this.repullExecutedTag(a,A,t,r)}async repullExecutedTag(x,A,r,e){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${W0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let a=await this.storage.getRowForTag(x),s=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:TA(s),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let l=e.get(x);if(l){let E=A.get(x),D=r&&E&&E.index<r.stamps.length?r.stamps[E.index]:s;l.dbStamp40=s,l.deviceStamp40=D}this.logger?.info(`${W0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${s}`)}catch(t){this.logger?.error(`${W0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,r){let e=[...x.values()],t=[...A.values()],a=zF(t);return{tags:e,files:t,changeRequests:r,requiresReconnectSync:a.length>0,rebootFilesDeployed:a,totalTagsUploaded:e.filter(s=>s.outcome==="upload"&&!s.historic).length,totalTagsDownloaded:e.filter(s=>s.outcome==="download").length,totalTagsSkipped:e.filter(s=>s.outcome===_e||s.outcome==="skip-db-readonly"||s.outcome===rt).length,totalHistoricRecordsAppended:e.reduce((s,l)=>s+(l.recordsAppended??0),0),totalFilesUploaded:t.filter(s=>s.outcome===xi).length,totalFilesDownloaded:t.filter(s=>s.outcome==="download").length,totalFilesDeleted:t.filter(s=>s.outcome===Zs).length,totalChangeRequestsExecuted:r.filter(s=>s.outcome===XF).length,totalErrors:e.filter(s=>s.outcome===re).length+t.filter(s=>s.outcome===re).length+r.filter(s=>s.outcome===qD).length}}async sync(x){let{signal:A}=x??{},r=await this.validateDevice(A);rA(A),this.emitProgress(hn,null,0,3);let e=this.buildTagMap(r),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${W0} requestStamps returned null`);this.emitProgress(hn,"stamps",1,3);let a=await this.utoMaster.requestFileList();this.emitProgress(hn,"file-list",2,3);let s=await this.resolveDbTags(e);this.emitProgress(hn,"db-tags",3,3);let l=await this.buildTagStampCache(s,e,t),E=new Map,D=new Map,b=[],j=await this.isAppInDevPhase();return rA(A),await this.uploadUtoTags(s,l,E,A),rA(A),await this.uploadFiles(a,D,j,A),rA(A),await this.executeChangeRequests(e,t,l,E,b,A),rA(A),await this.downloadUtoTags(s,l,E,A),rA(A),await this.downloadFiles(a,D,j,A),rA(A),zF([...D.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(E,D,b)}async executeAdHocChangeRequest(x,A){let r=await this.utoMaster.requestDeviceInfo();if(!r)throw new Error(`${W0} requestDeviceInfo returned null`);let e=this.buildTagMap(r),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${W0} requestStamps returned null`);let a=e.get(x),s=a?.sTag??`0x${x.toString(16)}`,l=A.map(g=>({stamp40:g.stamp40,user:"",json:g.json})).sort((g,q)=>g.stamp40-q.stamp40),E=new Map,D=[],b=new Set;return await this.executeChangeRequestTag(x,s,a,l,t,E,D,b),b.size>0&&await this.repullExecutedTags(b,e,new Map,void 0),D.find(g=>g.outcome!==ei)?.outcome??ei}},$D=require("events"),PD=require("events"),ND=require("events"),ID=5e3,Ji=class Q8 extends ND.EventEmitter{constructor(A=Dr){super(),s0(this,"logger",A),s0(this,"ws",null),s0(this,"bridgeTransport",null),s0(this,"bridgeSignal"),s0(this,"bridgeResolve",null),s0(this,"bridgeReject",null),s0(this,"serverMessageCount",0),s0(this,"settled",!1),s0(this,"abortHandler",null),s0(this,"connectTimeout"),s0(this,"writeQueue",[]),s0(this,"isProcessingQueue",!1),s0(this,"queueAborted",!1),s0(this,"queueDrainPromise",Promise.resolve()),s0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,r){return`wss://${A}/uto/1/sync/${r}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await g8(this.bridgeTransport,A)}catch(r){let e=r instanceof Error?r.message:String(r);this.logger.error(`Error writing to transport: ${e}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,r){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(r))}attachWebSocketHandlers(A,r){let e=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${r}`),this.transportUnsubscribe=this.bridgeTransport.onData(e),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${r}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${r})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,r,e,t){return new Promise((a,s)=>{if(t?.aborted){s(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=a,this.bridgeReject=s;let l=Q8.buildSyncUrl(r,e);this.logger.info(`Opening WebSocket: ${l}`);let E=new WebSocket(l);E.binaryType="arraybuffer",this.ws=E,this.connectTimeout=setTimeout(()=>{E.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),E.close(),this.settle("reject",new Error("WebSocket connection timeout")))},ID),this.attachWebSocketHandlers(E,r)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},Z8="https://lic.mydatanet.at/api/2/";async function xv(x,A=Z8){let r=`${A}devices/${x}/assignment`,e=await fetch(r);if(!e.ok)throw new Error(`Failed to get device assignment: ${e.status} ${e.statusText}`);return e.json()}var Av=class extends PD.EventEmitter{constructor(x=Dr){super(),s0(this,"logger",x)}async execute(x,A,r,e){let t=r;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await xv(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let a=new Ji(this.logger);a.on("wsConnected",()=>this.emit("wsConnected")),a.on("wsClosed",(l,E)=>this.emit("wsClosed",l,E)),a.on("wsError",l=>this.emit("wsError",l)),a.on("serverMessage",l=>this.emit("serverMessage",l));let s=await a.bridge(x,t,A,e);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+s.serverMessageCount+")"),{serverMessageCount:s.serverMessageCount}}},MD=require("events"),rv="Operation aborted";function LD(x){return x instanceof Error?x.message:String(x)}function ti(x){if(x?.aborted)throw new Error(rv)}var ev=class extends MD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"atHandler",x),s0(this,"logger",A)}async execute(x,A,r,e){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:s=>this.atHandler.queryMntServerConfig(s),initiateSync:s=>this.atHandler.initiateMntSync(s)},{name:"mdn",queryServer:s=>this.atHandler.queryMdnServerConfig(s),initiateSync:s=>this.atHandler.initiateMdnSync(s)}],a={};for(let s of t)try{a[s.name]=await this.runSyncPhase(s,x,A,e)}catch(l){if(e?.aborted)throw new Error(rv);let E=`${s.name.toUpperCase()} sync phase failed: ${LD(l)}`;throw this.logger.error(E),new Error(E)}return this.logger.info(`Debug sync completed (mntMessages=${a.mnt}, mdnMessages=${a.mdn})`),{mntServerMessageCount:a.mnt,mdnServerMessageCount:a.mdn}}async runSyncPhase(x,A,r,e){ti(e);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let a=await x.queryServer(e);this.logger.info(`${t} server domain: ${a}`),ti(e),await x.initiateSync(e),ti(e);let s=await this.syncWithServer(A,a,r,e);return this.logger.info(`${t} phase completed (serverMessages=${s.serverMessageCount})`),s.serverMessageCount}async syncWithServer(x,A,r,e){let t=new Ji(this.logger),a=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let s=this.atHandler.createConCloseMonitor(()=>{a=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let l=await t.bridge(x,A,r,e);return a?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(e)),l}finally{s()}}},RD=class extends $D.EventEmitter{constructor(x,A,r=Dr){super(),s0(this,"syncTransport",x),s0(this,"logger",r),s0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(r){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(r instanceof Error?r.message:String(r))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(r){throw this.emit("syncError",r),r}}async syncLegacy(x){let A=new Av(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",e),e}async syncWithDebug(x){let A=new ev(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),e={mode:"debug",serverMessageCount:r.mntServerMessageCount+r.mdnServerMessageCount,mntServerMessageCount:r.mntServerMessageCount,mdnServerMessageCount:r.mdnServerMessageCount};return this.emit("syncComplete",e),e}dispose(){}},OD=require("events"),Gx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},rx={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},FA=1e4,tv=9e4,nv=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function sv(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var we="Operation aborted",sA=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},zi=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},GD=class extends OD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"transport",x),s0(this,"logger",A),s0(this,"mutex",new Ti("AtCommandHandler")),s0(this,"bufferState",sv()),s0(this,"responseCallback",null),s0(this,"decoder",new TextDecoder),s0(this,"dataHandler"),s0(this,"disposeTransportListener"),s0(this,"isDisposed",!1),s0(this,"activeAbort",null),s0(this,"session"),this.dataHandler=r=>this.handleIncomingData(r),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(r,e,t=FA,a)=>this.executeSendAndWait(r,e,t,a),sendRaw:(r,e=FA)=>this.executeSendRaw(r,e),queryMntServerConfig:r=>this.executeQueryConfig(Gx.MNT_CFG,rx.MNT_CFG_PREFIX,r),queryMdnServerConfig:r=>this.executeQueryConfig(Gx.MDN_CFG,rx.MDN_CFG_PREFIX,r),initiateMntSync:r=>this.executeInitiateMntSync(r),initiateMdnSync:r=>this.executeInitiateMdnSync(r),sendCompanionCert:(r,e)=>this.executeSendCompanionCert(r,e),queryCompanionCertSupport:r=>this.executeQueryCompanionCertSupport(r),sendConnectionClose:r=>this.executeSendConnectionClose(r)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new sA;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let r=0;r<x.length;r++)A[r]=x.charCodeAt(r);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,r){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&r&&A.removeEventListener("abort",r)}}makeResponseChecker(x,A,r,e){let t=x instanceof RegExp;return a=>{if(x!==rx.ERROR&&a.includes(rx.ERROR)){A(),e(new zi);return}let s=!1,l=a;if(t){let E=a.match(x);E&&(s=!0,l=E[0])}else s=a.includes(x);if(s){A(),r(l);return}a.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,r,e){return new Promise((t,a)=>{if(this.isDisposed){a(new sA);return}if(e?.aborted){a(new Error(we));return}x&&(this.bufferState.buffer="");let l=A instanceof RegExp?A.source:A,E={cleanup:()=>{}},D=setTimeout(()=>{E.cleanup(),a(new Error(`Timeout waiting for response: ${l}`))},r),b=()=>{E.cleanup(),a(new Error(we))};E.cleanup=this.makeCleanup(D,e,b),e&&e.addEventListener("abort",b);let j=this.makeResponseChecker(A,E.cleanup,t,a);this.responseCallback=j,this.activeAbort=()=>{E.cleanup(),a(new sA)},!x&&this.bufferState.buffer&&j(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(g=>{E.cleanup(),a(g)}))})}executeSendRaw(x,A){return new Promise((r,e)=>{if(this.isDisposed){e(new sA);return}this.bufferState.buffer="";let t=setTimeout(()=>{a(),e(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),a=this.makeCleanup(t);this.activeAbort=()=>{a(),e(new sA)},this.responseCallback=s=>{nv.test(s)&&(a(),this.logger.info("RX: "+s.trim()),r(s))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(s=>{a(),e(s)})})}executeQueryConfig(x,A,r){return new Promise((e,t)=>{if(this.isDisposed){t(new sA);return}if(r?.aborted){t(new Error(we));return}this.bufferState.buffer="";let a={cleanup:()=>{}},s=setTimeout(()=>{a.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},FA),l=()=>{a.cleanup(),t(new Error(we))};a.cleanup=this.makeCleanup(s,r,l),r&&r.addEventListener("abort",l);let E=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{a.cleanup(),t(new sA)},this.responseCallback=D=>{let b=D.match(E);if(b){a.cleanup();let j=b[1].trim();this.logger.info(`Server config ${A}: ${j}`),e(j);return}D.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(D=>{a.cleanup(),this.logger.error(`Failed to send ${A} command: `+(D instanceof Error?D.message:String(D))),t(D)})})}async sendAndWait(x,A,r=FA,e){return this.withAtLock(t=>t.sendAndWait(x,A,r,e))}async sendRaw(x,A=FA){return this.withAtLock(r=>r.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(r=>r.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(Gx.MNT_SYNC,rx.OK,FA,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(Gx.MDN_SYNC,rx.OK,FA,x),await this.executeSendAndWait(null,rx.SYNC_START,FA,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new sA;if(A?.aborted)throw new Error(we);let r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),e=r.length,t=await this.executeSendAndWait(`${Gx.COMPANION_CERT}=${e}`,rx.OK,FA,A),a=parseInt(t.match(/(\d+)/)[1],10),s=0;for(;s<e;){let l=Math.min(a,e-s),E=r.slice(s,s+l);await this.executeSendAndWait(`${Gx.COMPANION_CERT}=${l},${s},${E}`,rx.OK,FA,A),s+=l}return this.executeCompanionCertFinalize(e,A)}executeCompanionCertFinalize(x,A){return new Promise((r,e)=>{if(this.isDisposed){e(new sA);return}if(A?.aborted){e(new Error(we));return}this.bufferState.buffer="";let t={cleanup:()=>{}},a=setTimeout(()=>{t.cleanup(),e(new Error("Timeout waiting for AT+COMPCERT finalize response"))},FA),s=()=>{t.cleanup(),e(new Error(we))};t.cleanup=this.makeCleanup(a,A,s),A&&A.addEventListener("abort",s),this.activeAbort=()=>{t.cleanup(),e(new sA)},this.responseCallback=E=>{let D=E.match(rx.COMPCERT_ERROR);if(D){t.cleanup(),r({success:!1,errorCode:parseInt(D[1],10)});return}if(E.includes(rx.OK)){t.cleanup(),r({success:!0});return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let l=`${Gx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+l),this.transport.write(this.encodeCommand(l)).catch(E=>{t.cleanup(),e(E)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(Gx.COMPANION_CERT_TEST,rx.OK,FA,x),!0}catch(A){if(A instanceof sA)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(Gx.CON_CLOSE,rx.CON_CLOSE,FA,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",r=e=>{A+=e,A.includes(rx.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",r),()=>{this.off("data",r)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},iv=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(iv||{}),UD=require("events"),ni="requesting-cert",si="cert-revoked",av=class ji extends UD.EventEmitter{constructor(){super(...arguments),s0(this,"utoMaster",null)}async authenticate(A){let r=A.logger??$n,{signal:e,atHandler:t}=A,a=()=>{if(e?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),a();let s=await this.loadOrGenerateKeypair(A.storage),l=await A.storage.getCertificate(A.apiConfig.apiHost);(l===null||!_i(l.notAfter))&&(r.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(ni),a(),l=await this.requestAndStoreCert(s,A)),this.utoMaster=new k8(A.utoTransport,r,A.timeSource),this.emitPhase("cert-presenting"),a();let E=l;l=await t.withAtLock(async j=>{let g=await this.presentCertWithRefresh(j,E,s,A);return await j.initiateMdnSync(e),g}),this.emitPhase("ecs-handshake"),a(),await this.utoMaster.init();let D=await this.utoMaster.initiateEcsHandshake({companionPublicKey:s.publicKey,companionPrivateKey:s.privateKey,signal:e});if(!D.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${D.resultCode})`);this.emitPhase("connected");let b=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:b}}catch(s){return this.handleError(s)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let r=await A.getKeypair();if(r!==null)return r;let e=await Fi();return await A.saveKeypair(e),e}static async fetchCertOrThrowRevoked(A,r){try{return await B8(r.apiConfig,{publicKey:A.publicKey,subject:r.subject})}catch(e){throw e instanceof Tt&&(e.httpStatus===401||e.httpStatus===404)?(await r.storage.clearCertificate(r.apiConfig.apiHost),new ii(si,`Companion cert revoked or session expired (HTTP ${e.httpStatus})`,{httpStatus:e.httpStatus,apiCode:e.code})):e}}async requestAndStoreCert(A,r){let e=await ji.fetchCertOrThrowRevoked(A,r),t={base64Url:e.certificateBase64Url,notAfter:e.notAfter};return await r.storage.saveCertificate(t,r.apiConfig.apiHost),t}static async refreshCertificate(A){let r=await A.storage.getKeypair(),e=r!==null?r:await(async()=>{let s=await Fi();return await A.storage.saveKeypair(s),s})(),t=await ji.fetchCertOrThrowRevoked(e,A),a={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(a,A.apiConfig.apiHost),a}static async clearCredentials(A,r){await A.clearCertificate(r)}async presentCertWithRefresh(A,r,e,t){let a=await A.sendCompanionCert(r.base64Url,t.signal);if(a.success||a.errorCode===3&&((t.logger??$n).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(ni),r=await this.requestAndStoreCert(e,t),a=await A.sendCompanionCert(r.base64Url,t.signal),a.success))return r;throw new ii("cert-presenting",`AT+COMPCERT rejected (code ${a.errorCode??"?"})`,{certErrorCode:a.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,r){return this.emit("phase","error"),{success:!1,phase:A,error:r}}handleError(A){return A instanceof ii?(this.emit("phase",A.phase===si?si:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof Tt?{success:!1,phase:ni,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};s0(av,"encodePublicKeyBase64Url",yi);var HD=av,ii=class extends Error{constructor(x,A,r={}){super(A),s0(this,"phase",x),s0(this,"extra",r),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},ov=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(ov||{}),KD={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function JD(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var zD=require("events");function Fv(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(r=>{let e=r.split(" ");return e.length<4?null:{name:e[0],scale:parseFloat(e[1]),offset:parseFloat(e[2]),unit:e[3]}}).filter(r=>r!==null):[]}function vv(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function fv(x,A,r){let e=parseFloat(x);return isNaN(e)?x:parseFloat(Number(e*A+r).toFixed(3)).toString()}function mi(x,A){return x.map((r,e)=>({name:r.name,displayValue:fv(A[e]??"",r.scale,r.offset),unit:r.unit}))}var VD=2e3,lv=class extends zD.EventEmitter{constructor(x,A=Dr){super(),s0(this,"atHandler",x),s0(this,"logger",A),s0(this,"datapoints",[]),s0(this,"values",[]),s0(this,"polling",!1),s0(this,"pollTimer",null),s0(this,"fetchInProgress",!1),s0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(Gx.APP_GET_METADATA),A=x.includes(rx.OK)?{supported:!0,pinRequired:!1}:x.includes(rx.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(rx.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(rx.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${Gx.APP_GET_METADATA}=${x}`:Gx.APP_GET_METADATA,r=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+r),r.includes(rx.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(r.includes(rx.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(r.includes(rx.OK)){let e=Fv(r);return this.logger.info("Parsed "+e.length+" datapoints"),this.datapoints=e,this.values=new Array(e.length).fill(""),this.emit("metadata",e),e}return r.includes(rx.ERROR)?(this.logger.error("Metadata fetch error: "+r),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let r=A?`${Gx.APP_GET_DATAVALUE}=${A}`:Gx.APP_GET_DATAVALUE,e=await x(r);if(e.includes(rx.OK)){let t=vv(e);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",mi(this.datapoints,t)),t}return[]}catch(r){return this.logger.warn("Value fetch error: "+(r instanceof Error?r.message:String(r))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(Gx.APP_TRIG_MEASURE_TEST)).includes(rx.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof sA)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:r=tv,signal:e}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let a=await t.sendRaw(Gx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+a),!a.includes(rx.OK))return this.logger.warn("Measurement trigger rejected: "+a.trim()),{outcome:"rejected",values:[],response:a};this.emit("measurementTriggered");try{let s=await t.sendAndWait(null,rx.MEASURED,r,e);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(E=>t.sendRaw(E),A),response:s}}catch(s){if(s instanceof sA)throw s;let l="timeout";return s instanceof zi?l="error":e?.aborted&&(l="aborted"),this.logger.warn(`Measurement ${l} while waiting for ${rx.MEASURED}: `+(s instanceof Error?s.message:String(s))),this.emit("measurementFailed",l),{outcome:l,values:[],response:a}}})}async startPolling(x,A=VD){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return mi(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function WD(x,A,r){let e=a=>{if(a instanceof sA)throw a},t=new lv(x);try{let a=await x.queryMdnServerConfig(r).catch(j=>(e(j),!1)),s=await t.checkSupport().catch(j=>(e(j),{supported:!1,pinRequired:!1})),l=s.supported?await t.checkMeasurementTriggerSupport().catch(j=>(e(j),!1)):!1,E=s.supported?{pinRequired:s.pinRequired,canTriggerMeasurement:l}:!1,D=!1,b=!1;if(a){let[j,g]=await Promise.all([x.queryCompanionCertSupport(r).catch(q=>(e(q),!1)),A?.getCertificate(a)]);D=j,b=g!=null&&_i(g.notAfter)}return{hostname:a,localData:E,secureConnection:D,validCert:b}}finally{t.dispose()}}var XD=require("events"),YD={0:"trigger",1:"wakeup",2:"online"},QD={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},ZD={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Wx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},xu=Wx.FAILED|Wx.ACTIVE|Wx.STARTED|Wx.RETRY|Wx.WAKEUPABLE|Wx.EXTSIM|Wx.DISABLED|Wx.WAKEUP|Wx.POSUPDATE_ACTIVE,YF=`${rx.RM2M_STATE}: `;function Ev(x=0){let A=(x&Wx.WAKEUPABLE)!==0,r="offline",e=A;return x&Wx.POSUPDATE_ACTIVE?(r="locating",e=!1):x&Wx.RETRY?(r="retry",e=!1):x&Wx.STARTED?(r="dialing",e=!1):x&Wx.ACTIVE?(r="active",e=!1):x&Wx.FAILED?(r="failed",e=A):x&Wx.DISABLED&&(r="disabled",e=!1),{signal:r,simType:(x&Wx.EXTSIM)!==0?"external":"internal",wakeupable:e,unknownFlags:x&~xu}}function Au(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:YD[A]??x}function ru(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:QD[A]??["unknown",`itf#${x}`,`itf#${x}`]}function eu(x){if(x.length===0)return null;let A=x.join(",");return ZD[A]??A}function Bv(x){let A=x.split(","),[r,e,t,a,...s]=A;if(!r||!/^-?\d+$/.test(r)||!e||!/^\d+$/.test(e))return null;let l=parseInt(e,10),E=ru(a),D=a!==void 0?parseInt(a,10):NaN;return{stamp:new Date,rssi:D>=101?null:parseInt(r,10),state:l,uplinkState:Ev(l),uplinkMode:Au(t),uplinkInterface:E?E[0]:null,uplinkInterfaceExtended:E?E[1]:null,uplinkInterfaceTechnical:E?E[2]:null,scriptState:eu(s)}}function cv(x){let A=x.indexOf(YF);if(A===-1)return null;let r=x.substring(A+YF.length),e=r.search(/\r?\n/);if(e===-1)return null;let t=r.substring(0,e).trim();return t?Bv(t):null}var tu=5e3,nu=class extends XD.EventEmitter{constructor(x,A=$n){super(),s0(this,"atHandler"),s0(this,"logger"),s0(this,"lastState",null),s0(this,"pollingTimer",null),s0(this,"polling",!1),s0(this,"fetchInProgress",!1),s0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(Gx.RM2M_STATE),A=cv(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=tu){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},su=require("events"),Cv=class extends su.EventEmitter{constructor(){super(...arguments),s0(this,"serialNumber",""),s0(this,"serverUrl",""),s0(this,"deviceId",""),s0(this,"rssi",null),s0(this,"hasDebugSupport",!1),s0(this,"connectionState","disconnected"),s0(this,"connectionError",""),s0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},iu=require("events"),dv={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},au=class extends iu.EventEmitter{constructor(x=Dr,A){super(),s0(this,"logger",x),s0(this,"state"),s0(this,"transports",null),s0(this,"transportFactory",null),s0(this,"disconnectFn",null),s0(this,"reconnectOptions"),s0(this,"reconnectAbortController",null),this.state=new Cv,this.reconnectOptions={...dv,...A}}async connect(x,A,r){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(r),this.logger.info(`Connected to device ${r.serialNumber}`),this.transports}catch(e){let t=e instanceof Error?e.message:String(e);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),e}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),r=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${r}ms...`),await this.sleep(r,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(e){this.logger.warn(`Reconnect attempt failed: ${e}`),r=Math.min(r*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(r=>{let e=setTimeout(r,x);A?.addEventListener("abort",()=>{clearTimeout(e),r()},{once:!0})})}},ou={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Fu={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},vu=590,fu=3e4,M0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},$A=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Jn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Vi=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function PA(x){try{return decodeURIComponent(x)}catch{throw new M0("malformed url encoding")}}var lu=2e3,Eu=2136;function Wi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=lu&&A<=Eu}function it(x){if(x)for(let A of["stamp","from","until"]){let r=x[A];if(typeof r=="string"&&!(A==="until"&&r==="*")&&!(A!=="stamp"&&r.trim().length===0)&&!Wi(r))throw new M0(`attribute '${A}' is not valid`)}}function Bu(x){return typeof x.setMetadataValue=="function"?x:null}function cu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Xi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Cu(x){return{status:200,body:x.ctx.siteInfo}}async function du(x){let{blueprint:A}=x.ctx;if(!A)throw new $A("blueprint unavailable");return{status:200,body:A}}async function Du(x){let{me:A}=x.ctx;if(A==null)throw new $A("no profile stored");return{status:200,body:A}}function Dv(x,A,r,e){let t=x.push;t&&(async()=>{try{await t.container(A,r,e)}catch(a){x.logger?.error(`[localApi] device push for tag ${A} failed:`,a)}})()}async function uu(x,A,r){let e=x.push;if(!e)return null;try{return await e.adHocChangeRequest(A,r)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var pu=1024;function Ot(x){let A=x.indexOf(0),r=A<0?x:x.subarray(0,A);try{let e=new TextDecoder("utf-8").decode(r),t=JSON.parse(e);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function uv(x,A=0){let r=new TextEncoder().encode(x),e=Math.max(pu,A,r.length+1),t=new Uint8Array(e);return t.set(r,0),t}var Yi=26432,Ne={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},pv=Object.keys(Ne),Gt=["standby","commissioned","offline","commissioning","online"],hi=Gt.reduce((x,A)=>x|Ne[A],0)>>>0;function bv(x){let A=0;for(let r of pv)x[r]===!0&&(A|=Ne[r]);return A>>>0}function Qi(x,A){let r={};for(let e of pv)x&Ne[e]?r[e]=!0:typeof A?.[e]=="boolean"&&(r[e]=!1);return r}async function jv(x,A){let r=A.device;if(!r)return!1;let e=await x.getRowForTag(Yi);if(!e?.data)return!1;let t=Ot(e.data);if(!t)return!1;let a=!1;if(typeof t.lifecycleFlags=="number"){let s=Qi(t.lifecycleFlags,r.lifecycle_flags);JSON.stringify(r.lifecycle_flags)!==JSON.stringify(s)&&(r.lifecycle_flags=s,a=!0)}return typeof t.lifecycleState=="string"&&r.lifecycle_state!==t.lifecycleState&&(r.lifecycle_state=t.lifecycleState,a=!0),a}var bu=new Set([...Gt,"service","lifecycle_state"]);function ju(x,A){let r=Math.max(ex.msToStamp40((x.timeSource??Lt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=r+1,r}async function mu(x){let A=yu(x.request.body??null);if(!A)throw new M0("invalid or missing request body");hu(A);let r=x.ctx,e=r.siteInfo.lifecycle_flags;if(!ku(e))throw new M0("this site does not support lifecycle flags!");let t=bv(e),a=t;for(let D of Gt){let b=A[D];typeof b=="boolean"&&(a=b?a|Ne[D]:a&~Ne[D])}if(a>>>=0,a===t)return{status:204,body:""};let s=ju(r,x.session),l=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~hi>>>0}}),stamp40:s},{json:JSON.stringify({lifecycleFlags:{op:"|",val:a&hi}}),stamp40:s+1}],E=cu(r.storage);return E&&await E.insertUtoChangeRequests(l.map(D=>({tag:Yi,stamp40:D.stamp40,json:D.json}))),r.siteInfo.lifecycle_flags=Qi(a,e),await mv(r),gu(r,l),{status:204,body:""}}function hu(x){let A=[];for(let[r,e]of Object.entries(x))bu.has(r)?(r==="lifecycle_state"?typeof e!="string":typeof e!="boolean")&&A.push(`"${r}" is not valid`):A.push(`"${r}" is not an allowed lifecycle property`);if(A.length>0)throw new M0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(r=>!Gt.includes(r)))throw new M0("invalid parameters")}async function gu(x,A){try{let r=await uu(x,Yi,A);r==="executed"?await jv(x.storage,x.siteInfo)&&await mv(x):r!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${r})`)}catch(r){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",r)}}async function mv(x){await Bu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function ku(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function yu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function hv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new M0('"select" must be an array')}}function _u(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new M0("invalid parameter, select must be an array")}}function wu(x,A){let r=new Map;if(A){for(let[e,t]of A)r.set(t,e);return r}for(let e of x?.fields??[]){if(Pr(e))continue;let t=e.alias??e.name;r.set(t,t.toLowerCase())}return r}function Su(x){let A=new Map;for(let r of x.fields){if(Pr(r))continue;let e=(r.alias??r.name).toLowerCase();A.set(r.name,e),r.alias&&A.set(r.alias,e)}return A}function qu(x){let A=new Set;for(let r of x.fields)Pr(r)||A.add((r.alias??r.name).toLowerCase());return A.add("stamp"),A}function Tu(x,A,r){if(!r)return null;let e=wu(x,A),t=new Set,a=[];for(let s of r){if(s==="stamp")continue;let l=e.get(s);l?t.add(l):a.push(s)}if(a.length>0)throw gv(a);return t}function $u(x,A){let r=Su(x),e=[],t=[],a=!1;for(let s of A){if(s==="stamp"){a=!0,e.push("stamp");continue}let l=r.get(s);l?e.push(l):t.push(s)}if(t.length>0)throw gv(t);return a||e.unshift("stamp"),e}function Pu(x,A){if(A===void 0)return;let r=qu(x),e=A.map(a=>a.toLowerCase()),t=e.filter(a=>!r.has(a));if(t.length>0)throw new M0(`unknown field name(s): ${t.join(",")}`);return e.includes("stamp")?e:["stamp",...e]}function Nu(x,A){if(!A)return x;let r={};for(let[e,t]of Object.entries(x))(e==="stamp"||A.has(e))&&(r[e]=t);return r}function Zi(x,A){if(!A)return x;let r={};for(let e of A)r[e]=e in x?x[e]:null;return r}function gv(x){return new M0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function zn(x,A){return x.containers.find(r=>r.name===A||r.alias===A)??null}async function Iu(x){let A=x.ctx,r=PA(x.params[1]),e=zn(A.model,r);if(!e)throw new M0("container does not exist");let t=await A.mapper.readContainer(r);if(!t)throw new $A(`no data for container "${r}"`);let a=Lu(A,e,t,Mu(x));return{status:200,body:kv(A,r,a)}}function Mu(x){let A=x.query.json??{};return hv(A.select)}function Lu(x,A,r,e){let t=Tu(A,Rt(x.blueprint??null,A),e);return Nu(r,t)}function kv(x,A,r){let e=x.model.byNameOrAlias(A);return e?Y8(r,Rt(x.blueprint??null,e)):r}async function Ru(x){let A=x.ctx,r=PA(x.params[1]),e=A.model.byNameOrAlias(r);if(!e)throw new $A(`unknown container "${r}"`);let t=await A.mapper.readContainer(r);if(!t)throw new $A(`unknown container "${r}"`);let a=x.query.json??{},s=_u(a.select),l=Pu(e,s);return{status:200,body:Zi(t,l)}}async function Ou(x){let A=PA(x.params[1]);return yv(x,A,"canonical")}async function Gu(x){let A=PA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new $A(`unknown container "${A}"`);return yv(x,A,"legacy")}async function yv(x,A,r){let e=Vu(x);if(!e)throw new M0("invalid or missing request body");it(e);let{stamp:t,...a}=e;if(r==="canonical"&&t!==void 0&&typeof t!="string")throw new M0("value(s) of field(s) stamp are not valid");let s=x.ctx;if(r==="canonical"&&!zn(s.model,A))throw new M0("container does not exist");let l=s.model.byNameOrAlias(A);if(l?.kind==="histdata")throw new $A(`unknown container "${A}"`);let E=r==="canonical"?Ku(s,l,a):Ju(l,a);try{let D=r==="canonical"&&t!==void 0?{...E,stamp:t}:E,b=await s.mapper.writeContainer(A,D);return b.devicePushable&&Dv(s,b.tag,b.data,b.stamp40),{status:204,body:""}}catch(D){throw Uu(D,A,r,s,l)}}function Uu(x,A,r,e,t){if(x instanceof Nt){let a=x.field?Hu(e,t,x.field,r):void 0;return r==="canonical"?a?new M0(`no permission to modify container field \`${a}\``):new M0(`no permission to modify container \`${A}\``):a?new Jn(`unknown field name(s): ${a}`):new Vi(`no permission to modify '${A}'`)}return x}function Hu(x,A,r,e){if(!A)return r;let t=A.fields.find(s=>s.name===r||s.name.toLowerCase()===r||(s.alias??s.name).toLowerCase()===r);return t?e==="legacy"?(t.alias??t.name).toLowerCase():Rt(x.blueprint??null,A)?.get(r)??t.alias??t.name:r}function Ku(x,A,r){if(!A)return r;let e=Rt(x.blueprint??null,A),t=new Map;if(e)for(let[a,s]of e)t.set(s,a);else for(let a of A.fields){let s=a.alias??a.name;t.set(s,s.toLowerCase()),t.set(s.toLowerCase(),s.toLowerCase())}return _v(A,t,r,a=>new M0(`unknown field name(s): ${a}`))}function Ju(x,A){if(!x)return A;let r=new Map;for(let e of x.fields){let t=e.alias??e.name;r.set(t.toLowerCase(),t.toLowerCase()),r.set(t,t.toLowerCase())}return _v(x,r,A,e=>new Jn(`unknown field name(s): ${e}`))}var zu=new Set(["stamp","stamp4","stamp8","datetime"]);function _v(x,A,r,e){let t=new Map(x.fields.map(E=>[(E.alias??E.name).toLowerCase(),E])),a={},s=[],l=[];for(let[E,D]of Object.entries(r)){let b=A.get(E);if(!b){s.push(E);continue}let j=t.get(b);if(j&&zu.has(j.type)&&!(typeof D=="string"&&Wi(D))){l.push(E);continue}a[b]=D}if(s.length>0)throw e(s.join(","));if(l.length>0)throw new M0(`value(s) of field(s) ${l.join(",")} are not valid`);return a}function Vu(x){let A=x.query.json,r=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,e=x.request.body;if(!e)return r?{...r}:null;let t=Wu(e);if(t===void 0)throw new M0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...r,...t}}function Wu(x){try{return JSON.parse(x)}catch{return}}var wv="x-mt-backfill",Sv="pending";async function xa(x,A,r){let e=x.push?.backfill;if(!(!e||A===void 0||A===null||r===null))try{return await e.call(x.push,{fromMs:r})==="pending"?{[wv]:Sv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Xu=1e3,kn=1e3,qv="20000101",Tv="*";async function Yu(x){let A=x.query.json??{};Lv(A,["from","until","count","offset","select"]),it(A);let r=x.ctx,e=PA(x.params[1]),{mapperSelect:t,order:a}=Pv(r,e,A.select);Nv(r,e);let s=On(A.from,qv,"from"),l=On(A.until,Tv,"until");Iv(s,l),l!==null&&(l=Zu(l));let E=x7(A.count),D=Mv(A.offset),b=await xa(r,A.from,s);return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:s,untilMs:l,count:E,offset:D,select:t})).map(g=>$v(x,r,e,Zi(g,a))),headers:b}}async function Qu(x){let A=x.query.json??{};Lv(A,["from","until","offset","select"]),it(A);let r=x.ctx,e=PA(x.params[1]),t=x.params[2],{mapperSelect:a,order:s}=Pv(r,e,A.select);Nv(r,e);let l=On(A.from,qv,"from"),E=On(A.until,Tv,"until");Iv(l,E);let D=Mv(A.offset),b=await xa(r,A.from,l),g=(await r.mapper.readTimeseries(e,{fromMs:l,untilMs:E,count:t==="youngest"?-1:1,offset:D,select:a}))[0];return g?{status:200,body:$v(x,r,e,Zi(g,s)),headers:b}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:b}}function $v(x,A,r,e){return x.apiVersion==="1"?e:kv(A,r,e)}function Pv(x,A,r){let e=hv(r);if(!e)return{mapperSelect:void 0,order:null};let t=zn(x.model,A);if(!t)return{mapperSelect:e,order:null};let a=$u(t,e),s=a.filter(l=>l!=="stamp");return{mapperSelect:s.length>0?s:void 0,order:a}}function Nv(x,A){if(!zn(x.model,A))throw new M0("timeseries does not exist")}function On(x,A,r){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return st(t)}catch{throw new M0(`attribute '${r}' is not valid`)}}function Iv(x,A){if(x!==null&&A!==null&&x>A)throw new M0('E_BAD_REQUEST "from" value must be older than "until"')}function Zu(x){let A=ex.msToStamp40(x);return ex.stamp40ToMS(A)>=x&&(A-=1),ex.stamp40ToMS(A)}function x7(x){if(x==null||x==="")return Xu;let A=Number(x);if(!Number.isInteger(A))throw new M0('"count" must be an integer');if(A===0)throw new M0("`count` cannot be 0");if(A<-kn)throw new M0(`"count" must be greater than or equal to -${kn}`);if(A>kn)throw new M0(`"count" must be less than or equal to ${kn}`);return A}function Mv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new M0('"offset" must be an integer');if(A<0)throw new M0('"offset" must be greater than or equal to 0');return A}function Lv(x,A){for(let r of Object.keys(x))if(!A.includes(r))throw new M0(`"${r}" is not allowed`)}var A7=1e5,r7="20000101",e7="*";async function t7(x){let r=`histdata${x.params[1]?Number(x.params[1]):0}`,e=x.ctx,t=e.model.byNameOrAlias(r);if(!t)throw new $A(`unknown container "${r}"`);let a=x.query.json??{};it(a);let{fromMs:s,untilMs:l}=i7(a);a7(s,l);let E=o7(a),D=F7(a),b=Rv(t,a.select)??["stamp"],j=Gn(a.from)?await xa(e,a.from,s):void 0,g=b.filter(P=>P!=="stamp");return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:s,untilMs:l,count:E,offset:D,select:g.length>0?g:void 0})).map(P=>b.map(T=>T==="stamp"?P.stamp:P[T]??null)),headers:j}}async function n7(x){let r=`histdata${x.params[1]?Number(x.params[1]):0}`,e=x.params[2],t=x.ctx,a=t.model.byNameOrAlias(r);if(!a)throw new $A(`unknown container "${r}"`);let s=x.query.json??{};it(s);let l=Rv(a,s.select)??["stamp"],E=s7(s),D=l.filter(g=>g!=="stamp"),j=(await t.mapper.readTimeseries(r,{fromMs:null,untilMs:E??null,count:E!==void 0||e==="youngest"?-1:1,select:D.length>0?D:void 0}))[0];return j?{status:200,body:[l.map(g=>g==="stamp"?j.stamp:j[g]??null)]}:{status:200,body:[]}}function s7(x){if(!(!Gn(x.until)||x.until==="*"))try{return st(String(x.until))??void 0}catch{throw new M0("from or until value invalid")}}function i7(x){let A=Gn(x.from),r=Gn(x.until);if((!A||!r)&&!Aa(x.count))throw new M0("missing or invalid parameters (from and until and/or count)");return{fromMs:QF(A?x.from:r7),untilMs:QF(r?x.until:e7)}}function a7(x,A){if(x!==null&&A!==null&&x>A)throw new M0('"from" value must be older than "until"')}function QF(x){let A=String(x);try{return st(A)}catch{throw new M0(`invalid stamp "${A}"`)}}function o7(x){if(!Aa(x.count))return A7;if(typeof x.count!="number")throw new M0("invalid parameter count");return x.count}function F7(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new M0("invalid parameter offset");return A}function Rv(x,A){if(A==null)return;if(!Array.isArray(A))throw new M0("invalid parameter, select must be an array");let r=A.map(l=>String(l).toLowerCase()),e=r.filter(l=>l.includes(" "));if(e.length>0)throw new M0(`aggregation suffix not allowed: ${e.join(",")}`);let t=r.includes("stamp")?r:["stamp",...r],a=new Set(x.fields.filter(l=>!Pr(l)).map(l=>(l.alias??l.name).toLowerCase()));a.add("stamp");let s=t.filter(l=>!a.has(l));if(s.length>0)throw new M0(`invalid channel(s) ${s.join(",")}`);return t}function Aa(x){return!!x}function Gn(x){return typeof x=="string"?x.trim().length>0:Aa(x)}var v7="device_id";function f7(x){return async A=>(await Vn(A),{status:200,body:await E7(A.ctx,x)})}async function Vn(x){let A=PA(x.params[0]),r=await l7(x.ctx);if(!r||r.toLowerCase()!==A.toLowerCase())throw new $A(`unknown device "${A}"`)}async function l7(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(v7)}async function E7(x,A){let r=await x.storage.getRowForTag(A);if(!r||!r.data)return{};let e=Ot(r.data);return e?(typeof e.pipAppVer=="number"&&(e.pipAppVer=`${e.pipAppVer}.0.0`),e.stamp=tt(ex.stamp40ToMS(dr(r.stamp))),e):{}}function ra(x,A,r){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(r);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function B7(x){return async A=>{await Vn(A);let r=d7(A.request.body??null);if(!r)throw new M0("invalid or missing request body");return ra(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x),t=e?.data?Ot(e.data)??{}:{};return await ea(A.ctx,x,e,{...t,...r}),{status:204,body:""}})}}function c7(x){return async A=>(await Vn(A),ra(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);return!r||!r.data?{status:204,body:""}:(await ea(A.ctx,x,r,{}),{status:204,body:""})}))}function C7(x){return async A=>{await Vn(A);let r=PA(A.params[1]);return ra(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);if(!e||!e.data)return{status:204,body:""};let t=Ot(e.data)??{},a=r.toLowerCase();for(let s of Object.keys(t))s.toLowerCase()===a&&delete t[s];return await ea(A.ctx,x,e,t),{status:204,body:""}})}}function d7(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function ea(x,A,r,e){let t=uv(JSON.stringify(e),r?.data?.length??0),a=ex.msToStamp40((x.timeSource??Lt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:TA(a),flags:r?.flags??0,site_related:r?.site_related??0,data:t}),Dv(x,A,t,a)}var Ov={"content-type":"application/json"},D7=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Du,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Cu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:du,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:mu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Qu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Yu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Iu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Ou,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:n7,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:t7,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Ru,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Gu,checksUid:!0},...u7()];function u7(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},r=Object.entries(x).map(([t,a])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:f7(a),checksUid:!1})),e=Object.entries(A).flatMap(([t,a])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:B7(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:c7(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:C7(a),checksUid:!1}]);return[...r,...e]}var p7=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function b7(x){let A=Xi();return r=>Gv(x,r,A)}async function Gv(x,A,r=Xi()){try{let[e,t]=h7(A.path),a=g7(t),s=m7(e,x);if(s===null)return Pe(404,"E_NOT_FOUND","unknown customer");let l=A.method.toUpperCase();for(let E of D7){if(E.method!==l)continue;let D=E.pattern.exec(s);if(!D)continue;let b=D.slice(1);if(E.checksUid&&!j7(x,b[0]))return Pe(404,"E_NOT_FOUND","unknown site");let j=/^\/api\/([12])\//.exec(s)?.[1]??"1",g=await E.handler({request:A,params:b,query:a,ctx:x,session:r,apiVersion:j});return _7(g)}return Pe(404,"E_NOT_FOUND","not found")}catch(e){return Hv(e)}}function j7(x,A){return x.allowAnySiteUid===!0||A!==void 0&&PA(A)===x.siteUid}function m7(x,A){let r=p7.exec(x);if(!r)return x;let e=PA(r[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===e||(A.siteInfo.customer_uid??"").toLowerCase()===e?`/api/${r[1]}/sites/${r[3]}`:null}function h7(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function g7(x){let A={params:{}};if(!x)return A;for(let r of x.split("&"))r&&k7(A,r);return A}function k7(x,A){let r=A.indexOf("="),e=PA(r<0?A:A.slice(0,r)),t=r<0?"":PA(A.slice(r+1));e==="json"?x.json=y7(t):x.params[e]=t}function y7(x){try{return JSON.parse(x)}catch{throw new M0("request supplied data which is not json formatted ")}}function _7(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Ov,...x.headers},body:A}}function Uv(x,A){return{status:x,headers:{...Ov},body:JSON.stringify(A)}}function Hv(x){return x instanceof M0||x instanceof Ki||x instanceof Ni?Pe(400,"E_BAD_REQUEST",x.message):x instanceof Jn||x instanceof Nt?Pe(403,"E_FORBIDDEN",x.message):x instanceof Vi?Pe(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof $A||x instanceof te?Pe(404,"E_NOT_FOUND",x.message):Uv(500,{err:x instanceof Error?x.message:String(x)})}function Pe(x,A,r){return Uv(x,{err:`${A} ${r}`})}function w7(x,A){let r=A.apmId??"local",e=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:r,customer_uid:r,app:{apmid:r,version:String(e)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var tp={};Pl(tp,{APM:()=>S0,DDE:()=>SA,DDE_Core:()=>X0,DFILES:()=>_t,DLO:()=>yt,DefaultFiles:()=>o0,Dependencies:()=>Bx,DevError:()=>kx,DevExitCode:()=>Ut,DevSession:()=>Re,DeviceProfiles:()=>xn,Diagnostics:()=>lt,ENV:()=>Js,Globals:()=>yx,Helper:()=>T0,HttpMethod:()=>ba,Library:()=>ge,Log:()=>Tr,Manifest:()=>Z,MyDatanetClient:()=>ss,Package:()=>Nx,Registry:()=>ux,build:()=>xp,buildDevelopmentInstallInfo:()=>Rf,dev:()=>Nf,generateDevApmId:()=>ja,install:()=>Z6,pack:()=>ep,publish:()=>rp});module.exports=Nl(tp);var hx=require("vscode-uri");var xt=require("vscode-uri");var Il=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Wt(x,A=0){let r=~~A^-1;for(let e=0;e<x.length;e++)r=r>>>8^Il[(r^x[e])&255];return(r^-1)>>>0}var ip=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),ap=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var T0;(q=>{function x(S,P){let[T,M]=P,{line:N,col:z}=S.linePos(T);return{line:Number(N)-1,startCharacter:z-1,endCharacter:z+(M-T)}}q.yamlRangeToLineInformation=x;let A=new TextEncoder;function r(S){return Wt(A.encode(S)).toString(16)}q.generateHashForLibraryName=r;function e(S){return Wt(A.encode(S)).toString(16)}q.generateHashForFilePath=e;function t(S){return Wt(S).toString(16).toUpperCase().padStart(8,"0")}q.generateCRC32ForFileContent=t;function a(S){try{let P=null;return S?.type==="Buffer"?P=Uint8Array.from(S.data):P=S,new TextDecoder("utf8").decode(P)}catch{return""}}q.convertBlobToString=a;function s(S=""){return S.replace(/\r\n|\n\r|\r/g,`
|
|
2634
2634
|
`)}q.normalizeLF=s;function l(S){try{let P=a(S);return s(P).split(`
|
|
2635
|
-
`)}catch{return[]}}q.convertBlobToStringArray=l,q.isNumeric=S=>!Array.isArray(S)&&S-parseFloat(S)+1>=0;function D(S){let P="",T=S.byteLength;for(let M=0;M<T;M++)P+=String.fromCharCode(S[M]);return btoa(P)}q.bufferToBase64=D;function
|
|
2635
|
+
`)}catch{return[]}}q.convertBlobToStringArray=l,q.isNumeric=S=>!Array.isArray(S)&&S-parseFloat(S)+1>=0;function D(S){let P="",T=S.byteLength;for(let M=0;M<T;M++)P+=String.fromCharCode(S[M]);return btoa(P)}q.bufferToBase64=D;function b(S,P){let T=`${S}`.match(/\{\d*(index)(\+\d*)?}/g);if(T){let M=S;return T.forEach(N=>{let z=N.replace(/\+0$/,""),v0=z.match(/index/)?.[0];if(v0){let R=z.slice(1,-1).split(v0)[1],k=parseInt(R)||0;M=M.replace(N,`${P+k}`)}}),M}else return S}q.patchValueWithArrayInfo=b;let j={};function g(S,P,T){let M=j[S];M&&clearTimeout(M.timer),j[S]={timer:setTimeout(()=>{delete j[S],T()},P),handler:T}}q.defer=g})(T0||={});var CF=require("image-dimensions"),dF=require("file-type-checker");var Dp=require("cross-fetch/polyfill"),Ka=nx(require("openapi-fetch"));var Yr=require("vscode-uri");var AA="dist/",Ia="dde/",Es="dlo/",Bs=".studio/",Ma="dfiles/",o0;(E=>{E.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${Bs}auto/`,r=`${Bs}dev/`,e=`${A}dlo/`,t=`${A}dde/`;E.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:e,autoInc:`${e}${E.fileNames.autoInc}`,defaultInc:`${e}${E.fileNames.defaultInc}`,autoUplinkInc:`${e}${E.fileNames.autoUplinkInc}`,autoLocalDataInc:`${e}${E.fileNames.autoLocalDataInc}`,autoDdeInc:`${e}${E.fileNames.autoDdeInc}`,mainDdeInc:`${e}${E.fileNames.mainDdeInc}`,legacyAutoInc:`${e}${E.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${e}${E.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${e}${E.fileNames.legacyAutoUplinkInc}`,cfg:`${e}${E.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${E.fileNames.historyJson}`}},libdeps:`${Bs}libdeps/`,dev:{path:r,mirror:`${r}${E.fileNames.devMirror}`,deviceLog:`${r}${E.fileNames.devDeviceLog}`}},dist:{path:AA,dloPath:`${AA}dlo/`,mainAmxPath:`${AA}dlo/${E.fileNames.mainAmx}`,mainAmxReportPath:`${AA}dlo/${E.fileNames.mainAmxReport}`,ddeXmlPath:`${AA}dde/${E.fileNames.ddeXml}`,ddeApiPath:`${AA}api/`,ddeApi:`${AA}api/${E.fileNames.ddeOpenApi}`,historyJson:`${AA}dde/${E.fileNames.historyJson}`,povPath:`${AA}pov`,povDetailsPath:`${AA}pov/details`,dfilesPath:`${AA}dfiles`,dfilesProperties:`${AA}dfiles/properties.json`,bloPath:`${AA}blo`,reportTemplate:`${AA}/${E.fileNames.reportTemplate}`,definesTs:`${AA}defines.ts`,definesAppTs:`${AA}defines.app.ts`},dlo:{path:Es,mainDLO:`${Es}main.dlo`,mainINI:`${Es}main.ini`},dde:{path:Ia,mainDDE:`${Ia}main.dde`},dfiles:{path:Ma,mainDFILES:`${Ma}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},E.readme=D=>`# ${D} README
|
|
2636
2636
|
|
|
2637
|
-
This is the README for your project "${D}". Write a brief description what this project is about.`,
|
|
2637
|
+
This is the README for your project "${D}". Write a brief description what this project is about.`,E.changelog=`# Changelog
|
|
2638
2638
|
|
|
2639
2639
|
All notable changes to this project will be documented in this file.
|
|
2640
2640
|
|
|
2641
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(o0||={});var
|
|
2642
|
-
`))
|
|
2643
|
-
`))}t.exportDefinesTs=r;function e(a,s){let l=[];return{result:a.replace(/\{\{([^}]+)\}\}/g,(D,
|
|
2644
|
-
`)),e=[]}return A}function
|
|
2641
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(o0||={});var Oa=nx(require("ini"));var Ml=T0.convertBlobToString,Ll=o0.filePaths.dlo.path,yx;(t=>{let x;(E=>(E.lucky="lucky",E.wynni="wynni",E.production="production"))(x=t.ENV||={});async function A(a,s,l){let E=await Z.read(a,s),D=await Bx.getAll(E),b={},j={},g={};for(let N in D){let z=Bx.dependencyToPath(a,N),v0=Bx.dependencyIdToName(N),R=Yr.Utils.joinPath(z,Ll,`${v0}.ini`);await Ke(s,R,b,j,g,v0);let k=Yr.Utils.joinPath(z,o0.filePaths.defaultsIni);await Ke(s,k,b,j,g,v0)}if(Z.isLibrary(E)){let N=Yr.Utils.joinPath(a,o0.filePaths.dlo.path,`${E.name}.ini`);l&&await s.stat(N)&&l.warn(`dlo/${E.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Ke(s,N,b,j,g,E.name)}let q=E.dlo?.iniFile||o0.filePaths.dlo.mainINI,S=Yr.Utils.joinPath(a,q);l&&await s.stat(S)&&l.warn(`${q} is deprecated. Please migrate your defines to app.ini in the project root.`);let P=Ul(q);if(await Ke(s,S,b,j,g,P),Z.isLibrary(E)){let N=Yr.Utils.joinPath(a,o0.filePaths.defaultsIni);await Ke(s,N,b,j,g,"defaults")}let T=Rl(E,b,j,g),M=Yr.Utils.joinPath(a,o0.filePaths.appIni);return await Ke(s,M,b,j,g,"app"),{flat:b,sections:j,definesWithSource:g,defaultsOnly:T}}t.read=A;async function r(a,s,l,E){let D=Object.entries(l.flat),b=[];for(let[q,S]of D){let P=l.definesWithSource[q];if(P?.comment){let M=La(P.comment);for(let N of M.split(`
|
|
2642
|
+
`))b.push(` ${N}`)}let T=Ra(S)?"number":"string";b.push(` ${q}: ${T};`)}let j=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...b," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[q,S]of D){let P=l.definesWithSource[q];if(P?.comment&&j.push(La(P.comment)),Ra(S))j.push(`globalThis.STUDIO_DEFINES['${q}'] = ${Number(S)};`);else{let T=S.replace(/\\/g,"\\\\").replace(/'/g,"\\'");j.push(`globalThis.STUDIO_DEFINES['${q}'] = '${T}';`)}}j.push(""),j.push("export {};"),j.push("");let g=Yr.Utils.joinPath(a,E??o0.filePaths.dist.definesTs);await s.writeFile(g,j.join(`
|
|
2643
|
+
`))}t.exportDefinesTs=r;function e(a,s){let l=[];return{result:a.replace(/\{\{([^}]+)\}\}/g,(D,b)=>{let j=b.trim();return Object.hasOwn(s,j)?s[j]:(l.push(j),D)}),unresolvedKeys:l}}t.replaceDefineTemplates=e})(yx||={});function Rl(x,A,r,e){if(Z.isLibrary(x))return{flat:{...A},sections:structuredClone(r),definesWithSource:{...e}}}function Ol(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function Gl(x){let A={},r=x.split(/\r?\n/),e=[],t=null;for(let a of r){let s=Ol(a.trim());if(s.kind==="empty"||s.kind==="other"){e=[];continue}if(s.kind==="comment"){e.push(s.text);continue}if(s.kind==="section"){t=s.name;continue}let l=t?`${t}_${s.key}`:s.key;e.length>0&&(A[l]=e.join(`
|
|
2644
|
+
`)),e=[]}return A}function La(x){let A=x.split(`
|
|
2645
2645
|
`);return A.length===1?`/** ${A[0]} */`:`/**
|
|
2646
2646
|
${A.map(e=>` * ${e}`).join(`
|
|
2647
2647
|
`)}
|
|
2648
|
-
*/`}function
|
|
2649
|
-
${e}`:e||x}function
|
|
2648
|
+
*/`}function Ra(x){return x!==""&&!isNaN(Number(x))}function Ul(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function Ga(x,A,r){let e=A?`${r}: ${A}`:void 0;return x&&e?`${x}
|
|
2649
|
+
${e}`:e||x}function Ua(x,A,r,e,t,a,s){let l=t?`${t}_${e}`:e,E={value:x,sourceUri:A,sourceLine:Kl(r,e,t)};return a[l]&&(E.comment=`${s}: ${a[l]}`),E}function Hl(x,A,r,e,t,a,s,l,E){e[x]||(e[x]={});for(let[D,b]of Object.entries(A)){let j=`${x}_${D}`,g=l[j],q=`${b}`;r[j]=q,e[x][D]=q;let S=Ua(q,a,s,D,x,l,E);S.comment=Ga(t[j]?.comment,g,E),t[j]=S}}async function Ke(x,A,r,e,t,a){if(!await x.stat(A))return;let s=await x.readFile(A),l=Ml(s),E=Oa.parse(l),D=A.toString(),b=l.split(/\r?\n/),j=Gl(l);for(let[g,q]of Object.entries(E))if(typeof q=="object"&&q!==null)Hl(g,q,r,e,t,D,b,j,a);else{let S=j[g],P=`${q}`;r[g]=P;let T=Ua(P,D,b,g,null,j,a);T.comment=Ga(t[g]?.comment,S,a),t[g]=T}}function Kl(x,A,r){let e=r===null,t=r?`[${r}]`:null,a=new RegExp(`^\\s*${Jl(A)}\\s*=`);for(let s=0;s<x.length;s++){let l=x[s].trim();if(t&&l===t){e=!0;continue}if(e&&l.startsWith("[")&&l.endsWith("]")&&r!==null){e=!1;continue}if(e&&a.test(x[s]))return s}return 0}function Jl(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Yt=nx(require("semver/preload")),{GET:cs,POST:Xt,PUT:Ha}=(0,Ka.default)();function yA(x){if(x)return{authorization:`Bearer ${x}`}}var ux;(q=>{q.getAPIUrl=S=>{let P="https://api.registry.microtronics.com";return S===yx.ENV.lucky?P="https://api.registry.lucky.ci.microtronics.com":S===yx.ENV.wynni&&(P="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:P+"/v1"}};async function A(S,P,T,M){let{data:N,error:z}=await cs("/publisher/{publisherId}/libraries/{libraryId}",{...(0,q.getAPIUrl)(M),headers:{...yA(S)},params:{path:{publisherId:P,libraryId:T}}});if(z)throw new Error(z.reason);return N}q.getLibraryProfile=A;async function r(S,P,T=!1){let M=await fetch(P,{headers:{...yA(S),...g(!0)}});if(M.status===200)return T?await M.json():await M.arrayBuffer();throw new Error("Failed to fetch the library content")}q.fetchCustomContent=r;async function e(S,P,T){try{let{data:M,error:N}=await cs("/publisher/{publisherId}",{...(0,q.getAPIUrl)(T),headers:{...yA(S)},params:{path:{publisherId:P}}});return N?(console.error(N),null):M}catch(M){return console.error(M),null}}q.getPublisher=e;async function t(S,P,T,M){try{let{data:N,error:z}=await Xt("/packages/{publisherId}/applications",{...(0,q.getAPIUrl)(M),headers:{...yA(S),...g(!0)},params:{path:{publisherId:P}},body:{...T}});if(z)throw new Error(z.reason);return N.id}catch{return null}}q.createNewApplication=t;async function a(S,P,T,M){let{data:N,error:z}=await cs("/publisher/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(M),headers:{...yA(S),...g(!0)},params:{path:{publisherId:P,applicationId:T}}});if(z)throw new Error(z.reason);return N}q.getExistingApplication=a;async function s(S,P,T,M,N){try{let{error:z}=await Ha("/packages/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(N),headers:{...yA(S),...g(!0)},params:{path:{publisherId:P,applicationId:T}},body:{...M}});if(z)throw new Error(z.reason);return}catch{return null}}q.updateExistingApplication=s;async function l(S,P,T,M,N,z){let v0=!!Yt.default.valid(M);try{let{error:R}=await Ha("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...yA(S),...g(v0)},params:{path:{publisherId:P,applicationId:T,applicationVersion:M}},body:{...N}});if(R)throw new Error(R.reason);return}catch{return null}}q.updateExistingApplicationVersion=l;async function E(S,P,T,M,N,z){let v0=!!Yt.default.valid(M),{data:R,error:k}=await Xt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...yA(S),...g(v0)},params:{path:{publisherId:P,applicationId:T,applicationVersion:M}},body:{},bodySerializer(){return N}});if(k)throw new Error(k.reason||k.err||k);return R}q.publishApplicationVersion=E;let D={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function b(S,P,T,M,N,z){try{let{error:v0}=await Xt("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,q.getAPIUrl)(z),headers:{...yA(S),...g(!0)},params:{path:{publisherId:P,libraryId:T,libraryVersion:M}},body:{...N},bodySerializer(R){let k=new FormData;for(let[O,V]of Object.entries(R))V!==void 0&&k.append(O,new Blob([V],{type:D[O]}),O);return k}});if(v0)throw new Error(v0.reason)}catch(v0){throw console.error(v0),v0}}q.publishLibraryVersion=b;async function j(S,P,T,M,N,z,v0){let R=!!Yt.default.valid(M),{error:k}=await Xt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,q.getAPIUrl)(v0),headers:{...yA(S),...g(R),"Content-Type":"application/octet-stream"},params:{path:{publisherId:P,applicationId:T,applicationVersion:M,applicationFileName:N}},body:{},bodySerializer(){return z}});if(k)throw new Error(k.reason)}q.updateApplicationFile=j;function g(S=!1){return S?{"X-Semver":"true"}:{}}q.injectSemverHeader=g})(ux||={});var DF=nx(require("semver/preload"));var Sr=require("vscode-uri");var ke=require("vscode-uri");var _x=require("vscode-uri");var Eo=nx(require("ajv")),Bo=nx(require("ajv-formats"));var Ja={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
|
|
2650
2650
|
|
|
2651
2651
|
\u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
|
|
2652
2652
|
|
|
@@ -2744,40 +2744,53 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
|
|
|
2744
2744
|
|
|
2745
2745
|
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
2746
2746
|
|
|
2747
|
-
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var sn=require("yaml");var Qr=require("yaml");var lt;(A=>A.CODE={ddeFieldLength:"field_name_length"})(lt||={});var X0;(H=>{let x;(b0=>(b0.state="state",b0.result="result",b0.aloha="aloha",b0.volatile="volatile",b0.setting="setting",b0.command="command",b0.storage="storage",b0.relations="relations"))(x=H.DDEContainerName||={});let A;(C0=>(C0.configA="configA",C0.configB="configB",C0.configC="configC",C0.config0="config0",C0.config1="config1",C0.config2="config2",C0.config3="config3",C0.config4="config4",C0.config5="config5",C0.config6="config6",C0.config7="config7",C0.config8="config8",C0.config9="config9",C0.histdata0="histdata0",C0.histdata1="histdata1",C0.histdata2="histdata2",C0.histdata3="histdata3",C0.histdata4="histdata4",C0.histdata5="histdata5",C0.histdata6="histdata6",C0.histdata7="histdata7",C0.histdata8="histdata8",C0.histdata9="histdata9",C0.aloha="aloha",C0.alerts="alerts",C0.applog="applog"))(A=H.ContainerName||={});let r;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(r=H.ContainerType||={});let e;(N0=>(N0.up="up",N0.down="down",N0.upPlus="up+",N0.downPlus="down+",N0.none="none",N0.backendOnly="backend-only",N0.deviceOnly="device-only",N0.both="both",N0.bothPlus="both+",N0.noneBackend="none-be"))(e=H.TransferDirection||={});function t(V,n0){return V==="cx"&&!["backend-only"].includes(n0)?"DDE_CID_CONFIG":V==="hx"?"DDE_CID_HISTDATA":V==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let a=["up","up+","down","down+","both","none","both+","backend-only","device-only"],s=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:a},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:a},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:a},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:a},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:a},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:a},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:a},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:a},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:a},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:a},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:s},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:s},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:s},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:s},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:s},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:s},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:s},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:s},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:s},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:s},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let g=["astring","nstring","cstring","wstring","ustring"],q=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:g,unit:g,chartMinimum:q,chartMaximum:q,scale:q,offset:q,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:q,chartAlarmHigh:q,chartWarningLow:q,chartWarningHigh:q,chartHysteresis:q,chartTriggerThreshold:q,chartTriggerRelation:q,chartSetPoint:q};function P(V,n0,e0){let x0=n0[V];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let f0=V==="chartSetPoint",[U,...F0]=x0.split("."),[,E0]=U.split("@"),b0=Object.values(e0.containers).find(cx=>cx.title===E0),p0=F0.join("."),N0=f0?";":"%",L0=(f0?"":"%")+(b0?.name||E0)+N0;if(L0=L0+`${p0}`,f0){let cx=e0.setPointList[n0.name];L0=L0+`;actual_output_value_${cx}`}return L0}else return x0}H.parseXMLValueWithRelation=P;function T(V){let{bitmask:n0}=V;if(!n0)return;let e0="$",x0=n0.replaceAll(" ","");if(n0.startsWith("0x"))e0+=x0.substring(2);else if(x0.startsWith("0b")){let f0=x0.substring(2).replaceAll(" ","");e0+=parseInt(f0,2).toString(16).toUpperCase()}return e0}H.parseXMLBitmask=T;function M(V){return V.type==="binary"?V.defaultValue.substring(2):V.defaultValue==="NaN"?"NAN":V.defaultValue}H.parseXMLDefaultValue=M,H.TDEF_NUMBER={xmlOut(V,n0,e0){V.decpl=P("decimalPlaces",n0,e0),V.decpl===void 0&&(V.decpl=0),V.vscale=P("scale",n0,e0),V.vofs=P("offset",n0,e0),V.min=P("chartMinimum",n0,e0),V.max=P("chartMaximum",n0,e0)}};let z={isBlob:1,xmlOut(V,n0){V.max=n0.byteSize}},v0={xmlOut(V){V.decpl=-1,V.param0="local",V.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...v0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...v0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let O=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function W(V){let n0=V.toLowerCase();return O.includes(n0)||/^field\d+$/.test(n0)||/^ch\d+$/.test(n0)}H.checkForReservedFieldName=W;function X(V){return!!V.fields.find(n0=>n0.library===null&&n0.type!=="shadow")}H.hasContainerAppFields=X})(X0||={});var kr=X0.DDEContainerName,Ja=X0.allowedRelationTypes,Ll=X0.regexRelation,Et=X0.ContainerType,Rl=X0.checkForReservedFieldName,Yt=X0.ContainerName,Bs=X0.CONTAINER_DEFS,Ol=X0.SERVER_CONTAINER,Gl=X0.HISTDATA_CONTAINER,Ul=X0.CONFIG_CONTAINER,Ox=X0.TransferDirection,Ka=X0.fieldTypeDefinitions,oA=T0.yamlRangeToLineInformation,cs="flexibleContainers",Qt;(A=>{class x{constructor(e,t,a){this.manifest=e;this.libraryFiles=t;this.ddeHistory=a}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let e=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:a,diagnostics:s,parsedYaml:l}=this.parseYamlFile(t.path,t.yaml,t.libraryName);e.push(...s),this.libraryDDE.push(a),this.libraryYaml[t.libraryName]=l}),e}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(e){let t=this.previousVersion,a=e.startsWith("timeseries_")?e.substring(11):e;return Object.values(t.containers).find(s=>s.title===a)||null}parseMainDDE(e,t){let{parsedDDE:a,diagnostics:s,parsedYaml:l,lineCounter:B}=this.parseYamlFile(e,t);return s.find(j=>j.level==="error")?{ddeJSON:null,diagnostics:s}:{ddeJSON:this.mergeAndFormat(a,e,B,l),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(e,t,a){this.fileDiagnostics.length=0;let s=new Qr.LineCounter,l=(0,Qr.parseDocument)(t,{lineCounter:s});if(!l.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:s};let B=l.contents||new Qr.YAMLMap;return this.validateContainerDefinition(B.items).forEach(p=>{this.validateAllowedContainer(e,p,s,a),this.validateContainerFields(l,e,p,s)}),{parsedDDE:this.yamlDocToDdeJson(l.toJS({mapAsMap:!0}),e,s,l,a),diagnostics:[...this.fileDiagnostics],parsedYaml:l,lineCounter:s}}yamlDocToDdeJson(e,t,a,s,l){l||(this.flexibleContainers=this.readFlexibleContainers(e.get(cs)));let B={containers:{},setPointList:{}},D=new Map,p=[...Object.values(kr)];if(e.get("cloudProject")){let g=Object.values(this.previousVersion.containers).map(P=>P.title),q=[...e.keys()].filter(P=>!this.reservedTopLevelKeys().has(P)),S=[...new Set([...p,...g,...q])];p.length=0,p.push(...S)}for(let g of p)e.has(g)&&D.set(g,e.get(g));let j=e.get("timeseries");if(j)for(let[g,q]of j)D.set(g,q);for(let[g,q]of D){let{realContainer:S,transferDirection:P,legacyTitle:T,directionFromHistory:M}=this.getRealContainerInformation(g);if(!S){let L=this.findContainerKeyRange(s,g);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${g}" could not be placed - no free container slot available.`,...L?oA(a,L):{line:0,startCharacter:0,endCharacter:0}});continue}M&&this.isPlusDirection(P)&&this.historyPlusDirectionContainers.add(S);let N=Bs[S],z=g.includes("timeseries_")?g.replace("timeseries_",""):g,v0={name:S,title:z,previousTitle:T,containerType:N.ctype,volatile:g===kr.volatile,transferDirection:P,fieldCount:q.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};l&&v0.libraries.push(l);for(let[L,k]of q){let O=[],W=k.get("type"),X=Ka[W];if(!(!X&&W!=="array")){if(W==="array"){let H=[],V=k.get("length"),n0=k.get("fields"),e0={name:L,length:V,library:l||null,fields:[]};v0.arrays[L]=e0;for(let x0=0;x0<V;x0++){let f0={name:L,index:x0};for(let[U,F0]of n0){let E0=Ka[F0.get("type")];if(!E0)continue;e0.fields?.find(L0=>L0.name===U)||e0.fields.push({name:U,type:F0.get("type"),byteSize:E0.len||F0.get("bytes")||F0.get("length")});let b0=`${L}[${x0}].${U}`,{fields:p0,shadowInfo:N0}=this.createDDEJsonFields(b0,l,E0,F0);p0.forEach(L0=>{L0.arrayRef=f0}),N0&&(v0.shadows[N0.name]=N0),H.push(...p0)}}O.push(...H)}else{let{arrayInfo:H,fields:V,shadowInfo:n0}=this.createDDEJsonFields(L,l,X,k);H&&(v0.arrays[H.name]=H),n0&&(v0.shadows[n0.name]=n0),O.push(...V)}O.forEach(H=>{H.index=++v0.fieldIndex,v0.fields.push(H),v0.size+=H.byteSize})}}B.containers[S]=v0}return B}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",cs,"timeseries",...Object.values(kr)])}getRealContainerInformation(e){let t,a,s,l=!1;if(this.previousVersion){let B=e.startsWith("timeseries_")?e.substring(11):e,{name:D,direction:p,previousTitle:j}=this.findPreviousUsedContainer(B);t=D,a=p,s=j,l=a!==void 0}if(!t){let B=Object.entries(this.usedContainerNames).find(([,D])=>D===e);B&&(t=B[0])}return t||(t=this.findNextFreeContainer(e)),t&&(this.usedContainerNames[t]=e),a||(a=[kr.setting,kr.command].includes(e)?Ox.down:Ox.up),t&&[Yt.configA,Yt.configB].includes(t)&&(a=Ox.backendOnly,l=!1),{realContainer:t,transferDirection:a,legacyTitle:s,directionFromHistory:l}}findContainerKeyRange(e,t){let a=e.contents;return a?.items?t.startsWith("timeseries_")?a.items.find(p=>p.key.value==="timeseries")?.value?.items.find(p=>p.key.value===t)?.key.range:a.items.find(l=>l.key.value===t)?.key.range:void 0}findNextFreeContainer(e){if(e===Yt.aloha)return Yt.aloha;let t=Ul;e.startsWith("timeseries_")?t=Gl:[kr.relations,kr.storage].includes(e)&&(t=Ol);let a=this.previousVersion?.containers;return a&&(t=t.filter(s=>!Object.hasOwn(a,s))),t.find(s=>!Object.hasOwn(this.usedContainerNames,s))}findPreviousUsedContainer(e){let t=this.previousVersion.containers,a=Object.values(t).find(s=>s.title===e);return{name:a?.name,direction:a?.transferDirection,previousTitle:a?.previousTitle}}createDDEJsonFields(e,t,a,s){let l=s.get("array"),B=[],D,p;if(l){D={name:e,library:t||null,length:l};for(let j=0;j<l;j++){let g=`${e.toLowerCase()}[${j}]`;B.push(this.buildDDEJsonField(g,s,{name:e,index:j},a,t,null))}}else{let j=this.buildDDEJsonField(e,s,null,a,t,null);B.push(j);let g=s.get("shadowFields");if(g){p={name:j.name,byteSize:j.byteSize,byteOffset:j.byteOffset};for(let[q,S]of g){let P=q;e.includes(".")&&(P=e.split(".")[0]+`.${q}`),B.push(this.buildDDEJsonField(P,S,null,a,t,j.name))}}}return{arrayInfo:D,shadowInfo:p,fields:B}}buildDDEJsonField(e,t,a,s,l,B){return{id:e.toLowerCase(),name:e,index:0,library:l||null,byteOffset:0,byteSize:s.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:a,shadowRef:B,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(e,t){return(0,Qr.isAlias)(t)?t.resolve(e).value:t?.value}validateContainerDefinition(e){let t=[];return e.forEach(a=>{let l=a.key.value;l==="timeseries"?a.value.items.forEach(B=>{B.key.value=`timeseries_${B.key}`,t.push(B)}):["dde","cloudProject","constants",cs].includes(l)||t.push(a)}),t}parseUserLevel(e){if(e==="read-only")return 99;if(e?.startsWith("UL"))return Number(e.substring(2))}parseChannelMode(e){if(e)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[e]??e}parseTriggerUndershoot(e){if(e)return{"greater-or-equal":0,"less-or-equal":1}[e]??e}validateAllowedContainer(e,t,a,s){if(!t.value)return;let B=t.key.value;if(s&&(B.startsWith("aloha")||B.startsWith("timeseries"))){let D=B.includes("_")?B.split("_")[1]:B;this.fileDiagnostics.push({file:e,level:"error",message:`"${D}" not allowed within a library`,...oA(a,t.key.range)})}if(Z.isAnalytics(this.manifest)&&![kr.relations,kr.storage].includes(B)){let D=B.includes("_")?B.split("_")[1]:B;this.fileDiagnostics.push({file:e,level:"error",message:`"${D}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...oA(a,t.key.range)})}}validateContainerFields(e,t,a,s){let l=a.value;if(!l)return;let B=a.key.value;Object.hasOwn(this.fieldNamesPerContainer,B)||(this.fieldNamesPerContainer[B]=[]);let D=this.getContainerOfPreviousVersion(B);l.items.forEach(p=>{let g=p.key.value;this.checkForContainerRelation(p,e,t,s),this.validateFieldName(p,B,t,s),this.checkFieldNameLength(p,B,t,s);let q=D?.fields.find(z=>z.id===g.toLowerCase()),S=p.value,P=S.get("type",!0),T=this.resolvePossibleAlias(e,P),M=S.get("bytes",!0),N=this.resolvePossibleAlias(e,M);q&&(P&&T&&q.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${q.type}" to "${T}".
|
|
2747
|
+
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var an=require("yaml");var Qr=require("yaml");var lt;(A=>A.CODE={ddeFieldLength:"field_name_length"})(lt||={});var X0;(H=>{let x;(p0=>(p0.state="state",p0.result="result",p0.aloha="aloha",p0.volatile="volatile",p0.setting="setting",p0.command="command",p0.storage="storage",p0.relations="relations"))(x=H.DDEContainerName||={});let A;(C0=>(C0.configA="configA",C0.configB="configB",C0.configC="configC",C0.config0="config0",C0.config1="config1",C0.config2="config2",C0.config3="config3",C0.config4="config4",C0.config5="config5",C0.config6="config6",C0.config7="config7",C0.config8="config8",C0.config9="config9",C0.histdata0="histdata0",C0.histdata1="histdata1",C0.histdata2="histdata2",C0.histdata3="histdata3",C0.histdata4="histdata4",C0.histdata5="histdata5",C0.histdata6="histdata6",C0.histdata7="histdata7",C0.histdata8="histdata8",C0.histdata9="histdata9",C0.aloha="aloha",C0.alerts="alerts",C0.applog="applog"))(A=H.ContainerName||={});let r;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(r=H.ContainerType||={});let e;(N0=>(N0.up="up",N0.down="down",N0.upPlus="up+",N0.downPlus="down+",N0.none="none",N0.backendOnly="backend-only",N0.deviceOnly="device-only",N0.both="both",N0.bothPlus="both+",N0.noneBackend="none-be"))(e=H.TransferDirection||={});function t(W,n0){return W==="cx"&&!["backend-only"].includes(n0)?"DDE_CID_CONFIG":W==="hx"?"DDE_CID_HISTDATA":W==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let a=["up","up+","down","down+","both","none","both+","backend-only","device-only"],s=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:a},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:a},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:a},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:a},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:a},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:a},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:a},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:a},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:a},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:a},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:s},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:s},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:s},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:s},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:s},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:s},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:s},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:s},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:s},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:s},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let g=["astring","nstring","cstring","wstring","ustring"],q=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:g,unit:g,chartMinimum:q,chartMaximum:q,scale:q,offset:q,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:q,chartAlarmHigh:q,chartWarningLow:q,chartWarningHigh:q,chartHysteresis:q,chartTriggerThreshold:q,chartTriggerRelation:q,chartSetPoint:q};function P(W,n0,e0){let x0=n0[W];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let f0=W==="chartSetPoint",[U,...F0]=x0.split("."),[,E0]=U.split("@"),p0=Object.values(e0.containers).find(cx=>cx.title===E0),b0=F0.join("."),N0=f0?";":"%",L0=(f0?"":"%")+(p0?.name||E0)+N0;if(L0=L0+`${b0}`,f0){let cx=e0.setPointList[n0.name];L0=L0+`;actual_output_value_${cx}`}return L0}else return x0}H.parseXMLValueWithRelation=P;function T(W){let{bitmask:n0}=W;if(!n0)return;let e0="$",x0=n0.replaceAll(" ","");if(n0.startsWith("0x"))e0+=x0.substring(2);else if(x0.startsWith("0b")){let f0=x0.substring(2).replaceAll(" ","");e0+=parseInt(f0,2).toString(16).toUpperCase()}return e0}H.parseXMLBitmask=T;function M(W){return W.type==="binary"?W.defaultValue.substring(2):W.defaultValue==="NaN"?"NAN":W.defaultValue}H.parseXMLDefaultValue=M,H.TDEF_NUMBER={xmlOut(W,n0,e0){W.decpl=P("decimalPlaces",n0,e0),W.decpl===void 0&&(W.decpl=0),W.vscale=P("scale",n0,e0),W.vofs=P("offset",n0,e0),W.min=P("chartMinimum",n0,e0),W.max=P("chartMaximum",n0,e0)}};let z={isBlob:1,xmlOut(W,n0){W.max=n0.byteSize}},v0={xmlOut(W){W.decpl=-1,W.param0="local",W.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...v0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...v0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let O=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function V(W){let n0=W.toLowerCase();return O.includes(n0)||/^field\d+$/.test(n0)||/^ch\d+$/.test(n0)}H.checkForReservedFieldName=V;function X(W){return!!W.fields.find(n0=>n0.library===null&&n0.type!=="shadow")}H.hasContainerAppFields=X})(X0||={});var kr=X0.DDEContainerName,za=X0.allowedRelationTypes,Vl=X0.regexRelation,Et=X0.ContainerType,Wl=X0.checkForReservedFieldName,Qt=X0.ContainerName,Cs=X0.CONTAINER_DEFS,Xl=X0.SERVER_CONTAINER,Yl=X0.HISTDATA_CONTAINER,Ql=X0.CONFIG_CONTAINER,Ox=X0.TransferDirection,Va=X0.fieldTypeDefinitions,oA=T0.yamlRangeToLineInformation,ds="flexibleContainers",Zt;(A=>{class x{constructor(e,t,a){this.manifest=e;this.libraryFiles=t;this.ddeHistory=a}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let e=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:a,diagnostics:s,parsedYaml:l}=this.parseYamlFile(t.path,t.yaml,t.libraryName);e.push(...s),this.libraryDDE.push(a),this.libraryYaml[t.libraryName]=l}),e}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(e){let t=this.previousVersion,a=e.startsWith("timeseries_")?e.substring(11):e;return Object.values(t.containers).find(s=>s.title===a)||null}parseMainDDE(e,t){let{parsedDDE:a,diagnostics:s,parsedYaml:l,lineCounter:E}=this.parseYamlFile(e,t);return s.find(j=>j.level==="error")?{ddeJSON:null,diagnostics:s}:{ddeJSON:this.mergeAndFormat(a,e,E,l),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(e,t,a){this.fileDiagnostics.length=0;let s=new Qr.LineCounter,l=(0,Qr.parseDocument)(t,{lineCounter:s});if(!l.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:s};let E=l.contents||new Qr.YAMLMap;return this.validateContainerDefinition(E.items).forEach(b=>{this.validateAllowedContainer(e,b,s,a),this.validateContainerFields(l,e,b,s)}),{parsedDDE:this.yamlDocToDdeJson(l.toJS({mapAsMap:!0}),e,s,l,a),diagnostics:[...this.fileDiagnostics],parsedYaml:l,lineCounter:s}}yamlDocToDdeJson(e,t,a,s,l){l||(this.flexibleContainers=this.readFlexibleContainers(e.get(ds)));let E={containers:{},setPointList:{}},D=new Map,b=[...Object.values(kr)];if(e.get("cloudProject")){let g=Object.values(this.previousVersion.containers).map(P=>P.title),q=[...e.keys()].filter(P=>!this.reservedTopLevelKeys().has(P)),S=[...new Set([...b,...g,...q])];b.length=0,b.push(...S)}for(let g of b)e.has(g)&&D.set(g,e.get(g));let j=e.get("timeseries");if(j)for(let[g,q]of j)D.set(g,q);for(let[g,q]of D){let{realContainer:S,transferDirection:P,legacyTitle:T,directionFromHistory:M}=this.getRealContainerInformation(g);if(!S){let R=this.findContainerKeyRange(s,g);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${g}" could not be placed - no free container slot available.`,...R?oA(a,R):{line:0,startCharacter:0,endCharacter:0}});continue}M&&this.isPlusDirection(P)&&this.historyPlusDirectionContainers.add(S);let N=Cs[S],z=g.includes("timeseries_")?g.replace("timeseries_",""):g,v0={name:S,title:z,previousTitle:T,containerType:N.ctype,volatile:g===kr.volatile,transferDirection:P,fieldCount:q.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};l&&v0.libraries.push(l);for(let[R,k]of q){let O=[],V=k.get("type"),X=Va[V];if(!(!X&&V!=="array")){if(V==="array"){let H=[],W=k.get("length"),n0=k.get("fields"),e0={name:R,length:W,library:l||null,fields:[]};v0.arrays[R]=e0;for(let x0=0;x0<W;x0++){let f0={name:R,index:x0};for(let[U,F0]of n0){let E0=Va[F0.get("type")];if(!E0)continue;e0.fields?.find(L0=>L0.name===U)||e0.fields.push({name:U,type:F0.get("type"),byteSize:E0.len||F0.get("bytes")||F0.get("length")});let p0=`${R}[${x0}].${U}`,{fields:b0,shadowInfo:N0}=this.createDDEJsonFields(p0,l,E0,F0);b0.forEach(L0=>{L0.arrayRef=f0}),N0&&(v0.shadows[N0.name]=N0),H.push(...b0)}}O.push(...H)}else{let{arrayInfo:H,fields:W,shadowInfo:n0}=this.createDDEJsonFields(R,l,X,k);H&&(v0.arrays[H.name]=H),n0&&(v0.shadows[n0.name]=n0),O.push(...W)}O.forEach(H=>{H.index=++v0.fieldIndex,v0.fields.push(H),v0.size+=H.byteSize})}}E.containers[S]=v0}return E}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",ds,"timeseries",...Object.values(kr)])}getRealContainerInformation(e){let t,a,s,l=!1;if(this.previousVersion){let E=e.startsWith("timeseries_")?e.substring(11):e,{name:D,direction:b,previousTitle:j}=this.findPreviousUsedContainer(E);t=D,a=b,s=j,l=a!==void 0}if(!t){let E=Object.entries(this.usedContainerNames).find(([,D])=>D===e);E&&(t=E[0])}return t||(t=this.findNextFreeContainer(e)),t&&(this.usedContainerNames[t]=e),a||(a=[kr.setting,kr.command].includes(e)?Ox.down:Ox.up),t&&[Qt.configA,Qt.configB].includes(t)&&(a=Ox.backendOnly,l=!1),{realContainer:t,transferDirection:a,legacyTitle:s,directionFromHistory:l}}findContainerKeyRange(e,t){let a=e.contents;return a?.items?t.startsWith("timeseries_")?a.items.find(b=>b.key.value==="timeseries")?.value?.items.find(b=>b.key.value===t)?.key.range:a.items.find(l=>l.key.value===t)?.key.range:void 0}findNextFreeContainer(e){if(e===Qt.aloha)return Qt.aloha;let t=Ql;e.startsWith("timeseries_")?t=Yl:[kr.relations,kr.storage].includes(e)&&(t=Xl);let a=this.previousVersion?.containers;return a&&(t=t.filter(s=>!Object.hasOwn(a,s))),t.find(s=>!Object.hasOwn(this.usedContainerNames,s))}findPreviousUsedContainer(e){let t=this.previousVersion.containers,a=Object.values(t).find(s=>s.title===e);return{name:a?.name,direction:a?.transferDirection,previousTitle:a?.previousTitle}}createDDEJsonFields(e,t,a,s){let l=s.get("array"),E=[],D,b;if(l){D={name:e,library:t||null,length:l};for(let j=0;j<l;j++){let g=`${e.toLowerCase()}[${j}]`;E.push(this.buildDDEJsonField(g,s,{name:e,index:j},a,t,null))}}else{let j=this.buildDDEJsonField(e,s,null,a,t,null);E.push(j);let g=s.get("shadowFields");if(g){b={name:j.name,byteSize:j.byteSize,byteOffset:j.byteOffset};for(let[q,S]of g){let P=q;e.includes(".")&&(P=e.split(".")[0]+`.${q}`),E.push(this.buildDDEJsonField(P,S,null,a,t,j.name))}}}return{arrayInfo:D,shadowInfo:b,fields:E}}buildDDEJsonField(e,t,a,s,l,E){return{id:e.toLowerCase(),name:e,index:0,library:l||null,byteOffset:0,byteSize:s.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:a,shadowRef:E,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(e,t){return(0,Qr.isAlias)(t)?t.resolve(e).value:t?.value}validateContainerDefinition(e){let t=[];return e.forEach(a=>{let l=a.key.value;l==="timeseries"?a.value.items.forEach(E=>{E.key.value=`timeseries_${E.key}`,t.push(E)}):["dde","cloudProject","constants",ds].includes(l)||t.push(a)}),t}parseUserLevel(e){if(e==="read-only")return 99;if(e?.startsWith("UL"))return Number(e.substring(2))}parseChannelMode(e){if(e)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[e]??e}parseTriggerUndershoot(e){if(e)return{"greater-or-equal":0,"less-or-equal":1}[e]??e}validateAllowedContainer(e,t,a,s){if(!t.value)return;let E=t.key.value;if(s&&(E.startsWith("aloha")||E.startsWith("timeseries"))){let D=E.includes("_")?E.split("_")[1]:E;this.fileDiagnostics.push({file:e,level:"error",message:`"${D}" not allowed within a library`,...oA(a,t.key.range)})}if(Z.isAnalytics(this.manifest)&&![kr.relations,kr.storage].includes(E)){let D=E.includes("_")?E.split("_")[1]:E;this.fileDiagnostics.push({file:e,level:"error",message:`"${D}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...oA(a,t.key.range)})}}validateContainerFields(e,t,a,s){let l=a.value;if(!l)return;let E=a.key.value;Object.hasOwn(this.fieldNamesPerContainer,E)||(this.fieldNamesPerContainer[E]=[]);let D=this.getContainerOfPreviousVersion(E);l.items.forEach(b=>{let g=b.key.value;this.checkForContainerRelation(b,e,t,s),this.validateFieldName(b,E,t,s),this.checkFieldNameLength(b,E,t,s);let q=D?.fields.find(z=>z.id===g.toLowerCase()),S=b.value,P=S.get("type",!0),T=this.resolvePossibleAlias(e,P),M=S.get("bytes",!0),N=this.resolvePossibleAlias(e,M);q&&(P&&T&&q.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${q.type}" to "${T}".
|
|
2748
2748
|
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...oA(s,P.range)}),M&&N&&q.byteSize!==N&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${q.byteSize}' to '${N}'.
|
|
2749
|
-
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...oA(s,M.range)}))})}checkForContainerRelation(e,t,a,s){let l=e.value.get("fields");l&&l.items.forEach(D=>{this.checkForContainerRelation(D,t,a,s)}),e.value.items.forEach(D=>{let
|
|
2750
|
-
`)}function
|
|
2751
|
-
`);if(
|
|
2749
|
+
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...oA(s,M.range)}))})}checkForContainerRelation(e,t,a,s){let l=e.value.get("fields");l&&l.items.forEach(D=>{this.checkForContainerRelation(D,t,a,s)}),e.value.items.forEach(D=>{let b=D.value;if(b?.value&&Vl.exec(`${b.value}`)){let j=D.key.value;if(j){if(!Object.hasOwn(za,j))return this.fileDiagnostics.push({file:a,level:"error",message:`Property "${j}" does not allow relations.`,...oA(s,b.range)});if(["scale","offset"].includes(j))return this.fileDiagnostics.push({file:a,level:"warning",message:`Container relations for "${j}" are not available within the dlo source.`,...oA(s,b.range)})}return this.validateContainerRelation(j,b,t,a,s)}})}validateFieldName(e,t,a,s){let l=this.fieldNamesPerContainer[t],E=e.key,D=E.value;Wl(D)&&this.fileDiagnostics.push({file:a,level:"error",message:`Reserved property "${D}" is not allowed.`,...oA(s,E.range)});let b=e.value.get("shadowFields");b&&b.items.forEach(j=>{this.validateFieldName(j,t,a,s)}),l.includes(D.toLowerCase())?this.fileDiagnostics.push({file:a,level:"error",message:`Field name "${D}" is already occupied`,...oA(s,E.range)}):l.push(D.toLowerCase())}checkFieldNameLength(e,t,a,s){let l=e.key,E=l.value,b=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,j=31-b.length;b.length+E.length>31&&this.fileDiagnostics.push({file:a,level:"error",code:lt.CODE.ddeFieldLength,message:`Field name "${E}" to long. ${j} characters allowed for this field/container.`,...oA(s,l.range)})}validateContainerRelation(e,t,a,s,l){let[E,D,b]=t.value.split(".",3),[j,g]=E.split("@"),q=j?j.split(":")[1]:null,P=(q&&this.libraryYaml[q]?this.libraryYaml[q]:a).contents?.get(g),T=D.split("[")[0],M=null;if(P){let N=P.get(T);if(N)if(b){let z=N.get("fields");z&&z.get(b)&&(M=z.get(b))}else M=N;else M=this.findRelatedShadowField(P,T)}if(M){let N=za[e],z=M.get("type");N.includes(z)||this.fileDiagnostics.push({file:s,level:"error",message:`Related field type "${z}" is not allowed for attribute "${e}".`,...oA(l,t.range)})}else q&&!this.libraryYaml[q]?this.fileDiagnostics.push({file:s,level:"error",message:`Related library "${q}" does not exist.`,...oA(l,t.range)}):this.fileDiagnostics.push({file:s,level:"error",message:`Related field "${t.value}" does not exist.`,...oA(l,t.range)})}findRelatedShadowField(e,t){for(let a of e.items){let l=a.value.get("shadowFields");if(!l)continue;let E=l.get(t);if(E)return E}}mergeAndFormat(e,t,a,s){let l={containers:{},setPointList:{}};for(let E of this.libraryDDE)this.combineDDE(l,E);this.combineDDE(l,e);for(let E of Object.values(l.containers)){let D=E.transferDirection;E.transferDirection=this.normalizeTransferDirection(E.name,D),this.warnIfHistoryDirectionNarrowed(E,D,t,a,s)}return this.sortContainerFields(l),this.generateSetPointList(l),l}readFlexibleContainers(e){let t=a=>e instanceof Map?e.get(a)===!0:e&&typeof e=="object"?e[a]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(e){let t=Cs[e]?.ctype;if(t===Et.hx)return"timeseries";if(t===Et.cx||t===Et.aloha)return"config"}flexibleSwitchFor(e){let t=this.flexibleSwitchGroupFor(e);return t?this.flexibleContainers[t]:void 0}isPlusDirection(e){return e===Ox.upPlus||e===Ox.downPlus||e===Ox.bothPlus}normalizeTransferDirection(e,t){let a=Cs[e]?.xmits,s=this.flexibleSwitchFor(e);if(!a||s===void 0)return t;let E=(s?[[Ox.up,Ox.upPlus],[Ox.down,Ox.downPlus],[Ox.both,Ox.bothPlus]]:[[Ox.upPlus,Ox.up],[Ox.downPlus,Ox.down],[Ox.bothPlus,Ox.both]]).find(([D,b])=>t===D&&a.includes(b));return E?E[1]:t}warnIfHistoryDirectionNarrowed(e,t,a,s,l){if(!this.historyPlusDirectionContainers.has(e.name)||!this.isPlusDirection(t)||e.transferDirection===t)return;let E=this.flexibleSwitchGroupFor(e.name),D=e.containerType===Et.hx?`timeseries_${e.title}`:e.title,b=l?this.findContainerKeyRange(l,D):void 0;this.fileDiagnostics.push({file:a,level:"warning",message:`Container "${e.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${E}" is not enabled - it now uses fixed-length "${e.transferDirection}". Enable the switch to keep variable-length transfer.`,...b?oA(s,b):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(e,t){for(let[a,s]of Object.entries(t.containers)){let l=e.containers[a];l?(l.title=s.title,l.knownNames.unshift(s.title),l.libraries.push(...s.libraries),l.fields.push(...s.fields),l.arrays={...l.arrays,...s.arrays},l.shadows={...l.shadows,...s.shadows}):(l=e.containers[a]=structuredClone(s),l.knownNames.unshift(s.title),l.fieldCount=l.fields.length,l.fieldIndex=0);let E=this.initialContainerByteOffset(l);for(let[D,b]of l.fields.entries()){if(b.shadowRef){let j=l.shadows[b.shadowRef];b.byteOffset=j.byteOffset}else b.byteOffset=E,this.updateShadowFieldInformation(e.containers[a],b),E+=b.byteSize||0;D>l.fieldCount-1&&(b.index+=l.fieldIndex)}l.fieldIndex+=s.fieldIndex,l.knownNames=[...new Set(l.knownNames)],l.libraries=[...new Set(l.libraries)],l.fieldCount=l.fields.length}}initialContainerByteOffset(e){return e.containerType===Et.hx?1:0}updateShadowFieldInformation(e,t){t&&Object.hasOwn(e.shadows,t.name)&&(e.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(e){for(let t of Object.values(e.containers)){let{sortedFields:a,containerSize:s}=this.sortFields(t);t.fields=a,t.size=s,t.fieldCount=t.fields.length}}sortFields(e){let t=e.fields.filter(j=>!j.shadowRef),a=e.fields.filter(j=>j.shadowRef),s=[],l=e.name;if(this.previousVersion.containers[l]){let j=this.sortPreviousContainerFields(e,t);s.push(...j)}else s.push(...t);s.forEach(j=>{this.updateShadowFieldInformation(e,j)});let D=s[s.length-1],b=D.byteSize+D.byteOffset;return a.forEach(j=>{j.byteOffset=e.shadows[j.shadowRef].byteOffset,s.push(j)}),{sortedFields:s,containerSize:b}}sortPreviousContainerFields(e,t){let a=e.name,s=this.previousVersion.containers[a],l=[],E=this.initialContainerByteOffset(e);for(let D of s.fields){if(D.shadowRef)continue;let b=t.findIndex(g=>D.id===g.name?.toLowerCase());if(b===-1){E=D.byteOffset+D.byteSize;continue}let j=t[b];if(D.type!==j.type&&D.byteSize!==j.byteSize){E=D.byteOffset+D.byteSize;continue}j.byteOffset=D.byteOffset,t.splice(b,1),l.push(j),E=this.initialContainerByteOffset(e)}if(E>this.initialContainerByteOffset(e)){let D=t.shift();l.push(...this.generatePlaceholderFieldIfNeeded(E,D)),this.updateShadowFieldInformation(e,D)}for(let D of t){if(D.shadowRef)D.byteOffset=e.shadows[D.shadowRef].byteOffset;else{this.updateShadowFieldInformation(e,D);let b=l[l.length-1];b.shadowRef&&(b=e.shadows[b.shadowRef]),D.byteOffset=b.byteOffset+b.byteSize}l.push(D)}return l}generatePlaceholderFieldIfNeeded(e,t){let a=[];if(t)t.byteOffset=e,a.push(t);else{let s={byteOffset:e,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};a.push(s)}return a}generateSetPointList(e){e.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(e.containers))for(let a of t.fields)a.chartSetPoint&&(Object.hasOwn(e.setPointList,a.name)||(e.setPointList[a.name]=this.getNextSetpointValue(e.setPointList)))}getNextSetpointValue(e){let t=[...Object.values(e),0];return Math.max(...t)+1}}A.PreCompiler=x})(Zt||={});var DA=X0.TransferDirection,VA=X0.parseXMLValueWithRelation,Zl=X0.parseXMLBitmask,xE=X0.parseXMLDefaultValue,AE=X0.fieldTypeDefinitions;function Ds(x,A){let e=[];function t(l,E=!0){if(E){if(Array.isArray(l)){e.push.apply(e,l);return}e.push(""+l)}}function a(l,E){l!=="mergeofs"&&t(`${l}=${E}`)}t("// DDE STRUCTURE created by Microtronics Studio");let s="source=rm2mraw";for(let[l,E]of Object.entries(A.containers)){l.startsWith("histdata")&&E.transferDirection!==DA.deviceOnly&&(t("<split>"),t(s),t("target="+l),t("key=0"+l.substr(-1,1)),t("</split>")),t("<table>"),a("name",l),a("alias",E.title),a("title",E.title.replace("_"," "));let D={};[DA.none,DA.backendOnly,DA.deviceOnly,DA.down,DA.downPlus].includes(E.transferDirection)&&a("upload","0"),[DA.none,DA.backendOnly,DA.deviceOnly,DA.up,DA.upPlus].includes(E.transferDirection)&&a("download","0"),(Z.isIotApp(x)||Z.isLibrary(x))&&[DA.up,DA.upPlus].includes(E.transferDirection)&&a("edit","99");for(let b of E.fields){if(b.type==="shadow")continue;let j=rE(b),g=AE[j.type],q=VA("title",j,A)||j.name;!q.startsWith("%")&&j.library&&(q=`${j.library}: ${q}`);let S={title:q,alias:j.name,index:b.index,...D};S.byteofs=`${j.byteOffset}`;for(let[P,T]of Object.entries(g.xml))S[P]=T;Object.hasOwn(g,"xmlOut")&&g.xmlOut(S,j,A),S.units=VA("unit",j,A),S.chmode=VA("channelMode",j,A),S.ialarm_high=VA("chartAlarmHigh",j,A),S.ialarm_low=VA("chartAlarmLow",j,A),S.iwarn_high=VA("chartWarningHigh",j,A),S.iwarn_low=VA("chartWarningLow",j,A),S.hysterese=VA("chartHysteresis",j,A),S.itrigger=VA("chartTriggerThreshold",j,A),S.itriggerus=VA("chartTriggerRelation",j,A),S.setpoint=VA("chartSetPoint",j,A),S.bitmask=Zl(j),j.hex&&(S.editmask="%HEX%"),j.readPermission&&(S.view=j.readPermission),j.writePermission&&(S.edit=j.writePermission),j.defaultValue!==void 0&&(S.default=xE(j)),j.utilsTransferInterval===!0&&(S.param0="%FFFF0005%transfer_interval"),t("<field>"),j.library&&t(`// declared by ${j.library} library`,!0);for(let[P,T]of Object.entries(S))T!==void 0&&a(P,`${T}`);t("</field>")}["alerts","applog"].includes(l)||(t("</table>"),t("// "+E.size+" bytes total size"))}return t("<split>"),t(s),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(s),t("target=applog0"),t("key=28"),t("</split>"),e.join(`
|
|
2750
|
+
`)}function rE(x){let A=structuredClone(x),r=x.arrayRef?.index;if(r===void 0)return A;for(let[e,t]of Object.entries(A))A[e]=T0.patchValueWithArrayInfo(t,r);return A}var lr=nx(require("semver"));var XA=nx(require("semver"));var Je={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},us={max_size:1e5,max_fields:1e3},fr={max_size:4e3,max_fields:1e3},WA={max_size:1024,max_fields:1e3},ze={configA:us,configB:us,configC:us,config0:fr,config1:fr,config2:fr,config3:fr,config4:fr,config5:fr,config6:fr,config7:fr,config8:fr,config9:fr,histdata0:WA,histdata1:WA,histdata2:WA,histdata3:WA,histdata4:WA,histdata5:WA,histdata6:WA,histdata7:WA,histdata8:WA,histdata9:WA,aloha:{...WA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},xn={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:ze,auto_inc:{...Je,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var js=require("vscode-uri");var Vx=X0.ContainerType,J0=X0.TransferDirection,Bt=X0.regexRelation,eE=X0.CONFIG_CONTAINER,bs=X0.CONTAINER_DEF_DLO_CID_BASE,dt=X0.CONTAINER_DEFS,Ct=X0.fieldTypeDefinitions,Xa=T0.isNumeric;function _A(x){let A=Ct[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var An="Microtronics/dlo-core";function ms(x){return Z.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,An)?Bx.rangeToVersion(x.libraryDependencies[An]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,An)?Bx.rangeToVersion(x.libraryDevDependencies[An]):null}function tE(x){let A=ms(x);return A===null||XA.gte(A,"0.3.0")?XA.valid(x.version)?x.version:XA.coerce(`${x.version}`):XA.coerce(x.version)?.major}function ps(x){let A=ms(x);if(A===null)return!1;let r=XA.coerce(A);return XA.gte(r,"1.1.0")}function nE(x){let A=ms(x);if(A===null)return!1;let r=XA.coerce(A);return XA.gte(r,"1.15.0")}var sE=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function iE(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=_A(x);return!A||A==="skip"?!1:sE.includes(`${A.rwfunc}`)}function aE(x,A,r){x("PROJECT META");let{dpid:e,registry:t}=r;if(!e)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:a}=xn[e];A("APM_DPID",`${e}`),A(`APM_DPID_${e}`,"1"),A(`APM_DPID_${e.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let s=tE(r);A("APM_VERSION",`${s}`),A("APM_NAME",`${r.name}`),A("APM_AUTHOR",`${r.publisher}`);for(let[l,E]of Object.entries(a))Xa(E)?A(l,`${E}`):A(l,`"${E}"`)}function oE(x,A,r,e){let t=e.flat,{definesWithSource:a}=e;A("GLOBAL DEFINES");for(let[s,l]of Object.entries(t)){let E=a[s]?.comment;if(E){let b=E.split(`
|
|
2751
|
+
`);if(b.length===1)x(`/** ${b[0]} */`);else{x("/**");for(let j of b)x(` * ${j}`);x(" */")}}let D=Object.hasOwn(t,l);r(s,`${l}`,D)}}function FE(x,A,r,e){let t=parseInt(x.substring(6)),a=1<<t;r[t]=A.size,e.cx_isupm|=[J0.both,J0.none,J0.deviceOnly,J0.up,J0.upPlus].includes(A.transferDirection)?a:0,e.cx_isvolatilem|=A.volatile?a:0,e.cx_isdnm|=[J0.both,J0.none,J0.deviceOnly,J0.down,J0.downPlus].includes(A.transferDirection)?a:0,e.cx_isvlm|=[J0.bothPlus,J0.upPlus,J0.downPlus].includes(A.transferDirection)?a:0}function vE(x,A,r,e){let t=parseInt(x.substring(8));r[t]=A.size,e.hx_isvlm|=[J0.upPlus].includes(A.transferDirection)?1<<t:0}function fE(x){return[J0.upPlus].includes(x.transferDirection)}function lE(x,A,r){let e=0,t=Array(10).fill(0),a={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},s=0,l=Array(10).fill(0),E={hx_isvlm:0},D;for(let[j,g]of Object.entries(r.containers))g.containerType===Vx.cx&&g.transferDirection!==J0.backendOnly?(FE(j,g,t,a),e=Math.max(e,g.size)):g.containerType===Vx.hx?(vE(j,g,l,E),e=Math.max(e,g.size)):g.containerType===Vx.aloha&&(D=fE(g),e=Math.max(e,g.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${e}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${a.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${a.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${a.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${a.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${s.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${l.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${E.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let b=[...l];Object.hasOwn(r,"applog")&&b.push(125),Object.hasOwn(r,"alerts")&&b.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...b)}`),x(""),D!==void 0&&(x(`#define _DDE_ALOHA_varlen ${D?1:0}`),x(""))}function EE(x,A,r){for(let[e,t]of Object.entries(r.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${e}`);let a=bs(t.containerType,t.transferDirection);if(!a){x("// ... container not available in DLO");continue}let s=`DDE_${t.containerType===Vx.aloha?Vx.aloha:t.title}`,l=dt[e];x(`// ${s}_id - container identifier required for ${s}_read/_write operations`),x(`#define ${s}_id (${a}+${l.cnum||0})`),x(`// ${s}_sz - [byte] container total size`),x(`#define ${s}_sz ${t.size}`),l.cnum!==void 0&&(x(`// ${s}_idx - 0+ container index number`),x(`#define ${s}_idx ${l.cnum}`))}}function Ya(x,A,r){let e=[],t=e.push.bind(e);function a(l){t(`
|
|
2752
2752
|
// === ${l} ===
|
|
2753
|
-
`)}function s(l,
|
|
2754
|
-
`)}var Dt=class{constructor(A,r,e){this.manifest=A;this.ddeMap=r;this.context=e;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,r){r&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(r||A)),r&&A===">"&&this.pawnIndent++}generate(){for(let[A,r]of Object.entries(this.ddeMap.containers))this.context&&!r.libraries.includes(this.context)||!us(r.containerType,r.transferDirection)||!r.fields||!this.context&&!X0.hasContainerAppFields(r)||dt[A].ctype!==Vx.cx&&this.context||(this.generateGlobalVarsForContainer(r),this.generateReadWriteFunctions(r));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,r,e=""){this.sourceType="globalVariables";let t=r?this.variableNameForPawnDefinition(A,r):A;if(r){let a=this.generateCommentForField(r);a&&(Array.isArray(a)?(this.pawn("/**"),a.forEach(s=>{this.pawn(` * ${s}`)}),this.pawn(" */")):this.pawn(`// ${a}`))}this.pawn(`stock ${t}${r?this.initialiserForGlobalVar(r):e};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let r=`DDE_${A.title}`,e=this.createFieldDefaultDefines(r,A);this.generateArrayDefines(r,A,e);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let a=this.generateFieldVariableName(r,t);this.createGlobalVar(`${a}`,t)}}createFieldDefaultDefines(A,r){let e=new Map;for(let t of r.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let a=r.arrays[t.arrayRef.name],s=`${A}_${t.arrayRef.name}`,l="";a.fields?.length&&(l=t.name.split(".")[1],s+=`_${l}`),this.createDefaultDefineForField(s,t),t.defaultDloDefine!==void 0&&(e.has(t.arrayRef.name)||e.set(t.arrayRef.name,new Map),e.get(t.arrayRef.name).set(l,t))}return e}isPlainCellField(A){if(A.type==="struct"||!Ct[A.type])return!1;let r=_A(A);return!r||r==="skip"?!1:!`${r.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let r=A?.get("");return r?.defaultDloDefine===void 0||!this.isPlainCellField(r)?"":` = [ ${r.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,r){if(!r?.size||!A.fields?.length)return"";let e=[];for(let a of A.fields){let s=r.get(a.name);if(s!==void 0&&!this.isPlainCellField(s)||!this.isPlainCellField({type:a.type}))return"";e.push(s?.defaultDloDefine??"0")}let t=`[ ${e.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,r,e){for(let t of Object.values(r.arrays)){if(this.context!==t.library)continue;let a=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${a} ${t.length}`),t.fields){for(let B of t.fields)Ct[B.type]?.isBlob&&B.byteSize&&this.addDefine(`${A}_${t.name}_${B.name}_dim`,B.byteSize);let s={...r};s.fields=[],t.fields.forEach(B=>{s.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:B.byteSize,id:B.name,library:t.library,name:B.name,type:B.type,title:null,index:0})});let l=`${A}_${t.name}_def`;this.generateTypeDefinitions(s,l),this.createGlobalVar(`${A}_${t.name}[${a}][${l}]`,void 0,this.structuredArrayInitialiser(t,e.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${a}]`,void 0,this.simpleArrayInitialiser(e.get(t.name)))}}generateCommentForField(A){let r=[`@type ${A.type}`];if(A.description&&r.unshift(A.description),A.defaultValue!==void 0){let{value:e,reason:t}=this.parseFieldDefault(A);r.push(`@default ${e} ${t||""}`)}return r}generateFieldVariableName(A,r){let e=`${A}_${r.name}`,t=Object.hasOwn(Ct,r.type)&&Ct[r.type].isBlob,a=r.byteSize;return a&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${r.name}_dim ${a}`),this.pawn(`#define ${A}_${r.name}_iter() for(new i=0;i<${a};i++)`)),this.sourceType="globalVariables",e}generateTypeDefinitions(A,r){this.sourceType="defines";let e=A.fields;if(!e)return;let t=[];this.pawn(">",`#define ${r} [`);for(let a of e){let s=this.generateFieldTypeDefinition(a,A,t,r);s!==null&&this.pawn(s)}this.pawn("<","]")}handleArrayFieldDedup(A,r,e,t){let a=A.arrayRef;if(a){let B=r.arrays[a.name];if(!e.includes(a.name)&&!B.fields)e.push(a.name);else return null}let s=A.arrayRef?A.arrayRef.name:A.name,l=A.arrayRef?`[${t}_${s}_dim]`:"";return{fieldName:s,fld_dim:l}}generateFieldTypeDefinition(A,r,e,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let a=this.handleArrayFieldDedup(A,r,e,t);if(a===null)return null;let{fieldName:s,fld_dim:l}=a,B="";if(A.type==="struct")B="// ."+s+l;else{let D=_A(A);if(!D)return null;D==="skip"?B=`// skipped - .${s}${l}`:B+=D.rwp.replace("%n",`.${s}${l}`).replace("%l",A.byteSize)}return B+=",",A.library&&(B+=` // declared by ${A.library} library`),B}variableNameForPawnDefinition(A,r){let e=_A(r);return e&&e!=="skip"?e.rwp.replace("%n",`${A}`).replace("%l",r.byteSize):A}createDefaultDefineForField(A,r){if(this.sourceType="defaultDefines",r.scale!==void 0&&this.addDefine(`${A}_scale`,r.scale),r.offset!==void 0&&this.addDefine(`${A}_offset`,r.offset),r.defaultValue!==void 0&&Ql(r)){let{value:e,reason:t}=this.parseFieldDefault(r),a=`${A}_default`;this.addDefine(a,e,t)&&(r.defaultDloDefine=a)}}addDefine(A,r,e){return Bt.exec(`${r}`)?!1:(this.knownDefines.includes(A)||(e&&this.pawn(`// ${e}`),this.pawn(`#define ${A} ${r}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let r=A.name,e=dt[r],t=`DDE_${A.containerType===Vx.aloha?Vx.aloha:A.title}`;[K0.both,K0.bothPlus,K0.none,K0.deviceOnly,K0.up,K0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),e.ctype===Vx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,r){this.sourceType="readWrite";let e=`DDE_${r.title}_id`,t=[Vx.hx,Vx.aloha].includes(r.containerType),a=r.containerType===Vx.hx,s=r.containerType===Vx.aloha,l=`_${A}_write`,B=Ds(this.manifest)?", flags":"",D=a?`stamp${B}`:"",p=Ds(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${l}(${a?p:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${s?Vx.aloha:r.title}_id);`),this.generateRWFunctionBody(A,r,"dde_w"),t&&this.pawn(`return dde_wend(${D});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let j=`${A}_transfer`,g=`${A}_persist`,q=this.functionArgumentsForDdeWrite(a,t);if(this.pawn(">",`${this.context?"stock ":""}${j}(${q}) {`),t)this.pawn(`${l}(${D});`);else{let S=r.name.slice(-1);this.pawn(`dde_flush(${S}, immediate);`)}this.pawn("<","}"),this.pawn(""),r.volatile&&(this.pawn(">",`stock ${g}() {`),this.pawn(`return rM2M_CfgFlush(${e});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,r){let e=Ds(this.manifest)?", const flags=0":"";return A?`const stamp=0${e}`:r?"":"bool:immediate=false"}generateReadMethod(A,r){this.sourceType="readWrite";let e=`_${A}_read`;this.pawn(">",`stock ${e}() {`),this.generateRWFunctionBody(A,r,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,r,e,t,a,s,l){if(!r.arrayRef)return this.emitSingleField(A,r,e,t,l);let B=r.arrayRef.name,D=a.get(B);return D?s.has(B)?l:(s.add(B),this.emitArrayLoop(A,D,e)):this.emitSingleField(A,r,e,t,l)}generateRWFunctionBody(A,r,e){let t=r.fields,a=this.analyzeArrayGroups(t,A,r),s=new Set,l=-1;for(let B of t){if(this.isFieldSkipped(B))continue;let D=_A(B);!D||D==="skip"||(l=this.emitFieldRW(A,B,e,D,a,s,l))}}defaultArgumentFor(A,r){return A.defaultDloDefine===void 0?"":r==="dde_r"||Xl(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,r,e,t,a){r.byteOffset!==a&&this.pawn(`_dde_idx = ${r.byteOffset};`);let s="";s+=e,s+=t.rwfunc;let l=`${A}_${r.name}`;return s+=`(${l}`,t.rwlen&&(s+=`, ${r.byteSize}`),s+=this.defaultArgumentFor(r,e),this.pawn(s+");"),r.byteOffset+r.byteSize}emitArrayLoop(A,r,e){this.pawn(">",`for (new _i = 0; _i < ${r.dimDefine}; _i++) {`);let t=-1;for(let a of r.templateFields){let s=_A(a);if(!s||s==="skip")continue;let l=a.byteOffset;l!==t&&this.pawn(`_dde_idx = ${l} + (_i * ${r.stride});`),t=l+a.byteSize;let B=`${A}_${a.name.replace(/\[\d+\]/,"[_i]")}`,D=`${e}${s.rwfunc}(${B}`;s.rwlen&&(D+=`, ${a.byteSize}`),D+=this.defaultArgumentFor(a,e),this.pawn(D+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,r,e){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,r,e)}collectArrayFieldsByIndex(A){let r=new Map;for(let e of A){if(this.isFieldSkipped(e)||!e.arrayRef)continue;let t=_A(e);if(!t||t==="skip")continue;let{name:a,index:s}=e.arrayRef;r.has(a)||r.set(a,new Map);let l=r.get(a);l.has(s)||l.set(s,[]),l.get(s).push(e)}return r}validateArrayStride(A,r){let e=r[0].byteOffset-A[0].byteOffset;if(e<=0)return null;for(let t=0;t<A.length;t++)if(r[t].byteOffset-A[t].byteOffset!==e)return null;return e}buildArrayGroups(A,r,e){let t=new Map;for(let[a,s]of A){let l=e.arrays[a];if(!l||l.length<2)continue;let B=s.get(0),D=s.get(1);if(!B||!D||B.length===0||D.length===0||B.length!==D.length)continue;let p=this.validateArrayStride(B,D);p!==null&&t.set(a,{arrayName:a,dimDefine:`${r}_${a}_dim`,stride:p,templateFields:B})}return t}parseFieldDefault(A){let r=_A(A),e=A.defaultValue;function t(s,l){return{value:s,reason:l}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${e}"`);case"wstring":return t(`''${e}''`);case"ustring":return t(`/* default not supported: ${e} */`);case"binary":{let l=`{ 0x${(e.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(l)}}if(e==="NaN"){let s=r.rwfunc;return t(`${s}_NaN`.toUpperCase())}let a=this.parseFieldScaleOffset(A);return a?t(a.calculated,a.reason):(e!==void 0&&!Bt.exec(`${e}`)&&A.type.startsWith("float")&&e%1===0&&(e=e.toFixed(A.decimalPlaces||1)),t(`${e}`))}parseFieldScaleOffset(A){let r=A.defaultValue;if(!(!!Bt.exec(`${A.offset}`)||!!Bt.exec(`${A.scale}`)||!!Bt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,a=A.scale!==void 0?Number(A.scale):1;if(a===0)return null;let s=(Number(r)-t)/a,l=`(defaultValue - offset) / scale -> (${r} - ${t}) / ${a}`;return A.type.startsWith("float")?s%1===0&&(s=s.toFixed(1)):(s=Math.round(s),l=`Rounded value of: ${l}`),{calculated:s,reason:l}}return null}};function sE(x){return`${`onUplinkApply_${x}()`};`}function Xa(x,A,r){A.libraries.forEach(e=>{let t=T0.generateHashForLibraryName(e);x(` #ifdef _${t}${r}_${A.title}`),x(` _${t}${r}_${A.title}(); // ${e}`),x(" #endif")})}function iE(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(r=>{let t=`_${T0.generateHashForLibraryName(r)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function aE(x){let A=[],r=[];for(let[e,t]of Object.entries(x.containers))dt[e].ctype===Vx.cx&&([K0.up,K0.upPlus,K0.deviceOnly].includes(t.transferDirection)&&r.push(t),[K0.bothPlus,K0.both,K0.downPlus,K0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:r}}function oE(x,A){A.length&&x("");for(let r of A)r.knownNames.forEach(e=>{x(`forward onUplinkRestore_${e}();`)}),x(""),x(`stock restoreUplink${r.name}() {`),x(` _DDE_${r.name}_read();`),Xa(x,r,"Restore"),X0.hasContainerAppFields(r)&&x(` onUplinkRestore_${r.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let r of A)x(` case DDE_${r.title}_id: restoreUplink${r.name}(); // ${r.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function FE(x,A){A.length&&x("");for(let r of A)r.knownNames.forEach(e=>{x(`forward onUplinkApply_${e}();`)}),x(""),x(`stock applyUplink${r.name}() {`),x(` _DDE_${r.name}_read();`),Xa(x,r,"Apply"),X0.hasContainerAppFields(r)&&x(` ${sE(r.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let r of A)x(` case DDE_${r.title}_id: return applyUplink${r.name}(); // ${r.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function Ya(x,A){let r=[],e=r.push.bind(r);iE(e,A);let{containerApply:t,containerRestore:a}=aE(x);return oE(e,a),FE(e,t),r.join(`
|
|
2755
|
-
`)}var
|
|
2756
|
-
`)}function
|
|
2757
|
-
`)}async function fE(x,A,r){let e=[];for(let t of r){let a=o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(bs.Utils.joinPath(x,a))&&e.push(`#include "${o0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return e}async function ct(x,A,r,e){let t=bs.Utils.joinPath(x,o0.filePaths.studio.auto.dlo.path,e);await A.stat(t)&&r.push(`#include "${e}"`)}var Ao=nx(require("semver")),ro=require("yaml");var wA=X0.ContainerType,rn=X0.TransferDirection,lE=X0.fieldTypeDefinitions,Ve={$ref:"#/components/parameters/contextId"},EE={$ref:"#/components/parameters/addonId"},BE={$ref:"#/components/parameters/appId"},xo={$ref:"#/components/schemas/histdataResponse"},cE={$ref:"#/components/schemas/histdataRequest"},en={$ref:"#/components/schemas/rapidM2MStamp"},CE={$ref:"#/components/schemas/timeseriesRequestBase"},dE={$ref:"#/components/headers/xMtBackfill"},DE="x-mt-backfill",js={[DE]:dE},An="rapidM2M Stamp",YA={description:"Successful operation"},eo={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}},headers:{xMtBackfill:{description:["Only set by the local PoV API of the companion app, never by the myDatanet server.",'Present (value "pending") while the companion app is still fetching the requested time range from the device (on-demand backfill).',"The body is always answered immediately from the local data mirror in the normal shape; the loading signal lives only in this header.","Clients should show a loading indicator and re-issue the same request (poll) until the header disappears - every poll reads the by-then-larger mirror.",'A backfill is only armed by an explicit "from" stamp in the request; a request without "from" or with from: "*" never triggers a device fetch.',"The header is absent when the range is already local, the fetch completed within the internal grace wait, no device is connected, the connected device belongs to another site, the fetch failed (15 s cooldown before retry) or the device no longer retains the range.",'A range the device no longer holds simply stays empty and should be rendered as an empty/partial result, not as an error. Deep ranges can stay "pending" for a while, a completed depth is persisted and never fetched twice.'].join(" "),schema:{type:"string",enum:["pending"]}}}},to={...structuredClone(eo)};Object.assign(to.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[en,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:An,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:An,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:An,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:An,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var ut={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Zr={401:{description:"Permission denied",...ut},403:{description:"Forbidden",...ut},404:{description:"Resource not found",...ut},500:{description:"Internal error",...ut}};function ms(x,A,r=null){let e=Ao.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:e||""},tags:[],paths:{},components:{parameters:{},schemas:{},headers:{}}};r?Object.assign(t.components,structuredClone(eo)):Object.assign(t.components,structuredClone(to));let a=Z.isAddon(A),s=Z.isAnalytics(A);a&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let l of Object.values(x.containers))r&&(!l.libraries.includes(r)||l.containerType===wA.hx)||!r&&!X0.hasContainerAppFields(l)||l.containerType===wA.aloha||(uE(t,l),pE(t,l,r),hE(t,l,a,s),!a&&!s&&(bE(t,l,r),mE(t,l)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,ro.stringify)(t)}function uE(x,A){x.tags.push({name:uA(A.title),description:`Transfer direction ${A.transferDirection}`})}function uA(x){return x.split("_").join(" ")}function bE(x,A,r){let e=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},a=[];A.containerType===wA.hx&&(e+="Select",a.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let s of A.fields)s.library!==r||s.type==="shadow"||(A.containerType===wA.hx?t.properties.select.items.enum.push(s.id):(t.properties[s.id]=no(s),!s.readPermission&&!s.writePermission&&a.push(s.id)));t.required=a.length?a:void 0,x.components.schemas[e]=t}function pE(x,A,r=null){let e=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},a=[],s=A.containerType===wA.hx;for(let B of A.fields)B.library!==r||B.type==="shadow"||(t.properties[B.name]=no(B),!B.readPermission&&!B.writePermission&&a.push(B.name));t.required=a.length?a:void 0,x.components.schemas[e]=t;let l=t.properties;if(s){t.required=t.required?.map(D=>D.toLowerCase());let B={};for(let[D,p]of Object.entries(t.properties))B[D.toLowerCase()]=p;t.properties=B}if(s){let B={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(l)}}}};x.components.schemas[`${e}RequestSingle`]=B,x.components.schemas[`${e}Request`]={allOf:[CE,B]},t.properties.stamp=en,a.push("stamp")}}function no(x){let r={...lE[x.type].openApi},e=jE(x);return r.default=e,r.example=e,r.description=x.description,r}function jE(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function mE(x,A){let r=`/api/1/sites/{siteUid}/${A.name}`,e={get:void 0,put:void 0};if([wA.cx,wA.cb].includes(A.containerType))e.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[Ve],responses:{200:{...YA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:en}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Zr}},[rn.down,rn.backendOnly].includes(A.transferDirection)&&(e.put={deprecated:!0,tags:[uA(A.title)],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[Ve],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...YA},204:{...YA},...Zr}});else if(A.containerType===wA.hx){let t=`${r}`;r+="/youngest",e.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the youngest data of the "${uA(A.title)}" container`,parameters:[Ve,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...YA,content:{"application/json":{schema:xo}}},...Zr}},x.paths[t]={get:{deprecated:!0,tags:[uA(A.title)],summary:`Get the historical data of the "${uA(A.title)}" container.`,parameters:[Ve,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},cE]}}],responses:{200:{...YA,headers:js,content:{"application/json":{schema:xo}}},...Zr}}}}x.paths[r]=e}function hE(x,A,r=!1,e=!1){let a=A.containerType===wA.hx?"timeseries":"containers",s=[],l=uA(A.title);e||s.push({path:`/api/1/sites/{siteUid}/${a}/${A.title}`,params:[Ve],tags:[l]}),r&&(s=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${a}/${A.title}`,params:[Ve,EE],tags:[l]}]);let B={path:`/api/1/app-center/apps/{appUid}/${a}/${A.title}`,params:[BE],tags:["app-center"]};e&&B.tags.push(l),s.push(B);let D={get:void 0,put:void 0,post:void 0},p={tags:[],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[],responses:{200:{...YA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:en}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Zr}};if([wA.cx,wA.cb].includes(A.containerType)&&(D.get=p,[rn.down,rn.backendOnly].includes(A.transferDirection)&&(D.put={tags:[],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...YA},204:{...YA},...Zr}}),s.forEach(j=>{let g=structuredClone(D);Object.values(g).forEach(q=>{q?.parameters?.unshift(...j.params),q?.tags?.unshift(...j.tags)}),x.paths[j.path]=g})),A.containerType===wA.hx){D.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...YA,headers:js,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Zr}},r&&(D.post={tags:[],summary:`Insert data into the "${uA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...YA},400:{description:"Bad request",...ut},...Zr}});let j=s[0],g=structuredClone(D);Object.values(g).forEach(z=>{z?.parameters?.unshift(...j.params),z?.tags?.unshift(...j.tags)}),x.paths[j.path]=g;let q={...YA,headers:js,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},S=`${j.path}/youngest`,P={get:structuredClone(g.get)};P.get.summary=`Get the youngest record of "${A.title}" container`,P.get.responses[200]=q;let T=r?2:1;P.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[S]=P;let M=`${j.path}/oldest`,N={get:structuredClone(g.get)};N.get.summary=`Get the oldest record of "${A.title}" container`,N.get.responses[200]=q,N.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[M]=N}}var io=X0.TransferDirection,tn=" new szTemp{64};",nn=" return strcat(aData, szTemp, sizeof(szTemp));";function ao(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",r=A.includes("["),t=A.includes("{")||r;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return r?null:"s";default:return null}}function hs(x){if(x.type==="shadow"||x.shadowRef)return null;let A=_A(x);return!A||A==="skip"?null:ao(A)}function oo(x){return[X0.ContainerType.hx,X0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==io.backendOnly}function gE(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=_A(x);return!!A&&A!=="skip"}function kE(x,A,r){let e=x.name.indexOf("]"),t=e>=0?x.name.substring(e+1):"",a=`${x.arrayRef.name}|${t}|${A}`;r.has(a)||r.set(a,{fields:[],formatType:A}),r.get(a).fields.push(x)}function yE(x){let A=[],r=new Map,e=new Set,t=!1;for(let a of x){if(!gE(a))continue;let s=hs(a);a.arrayRef&&s?kE(a,s,r):(A.push(a),s?e.add(s):t=!0)}return{standaloneFields:A,groupMap:r,usedFormats:e,hasInlineFields:t}}function _E(x,A,r){r.sort((D,p)=>D.arrayRef.index-p.arrayRef.index);let e=r.map(D=>D.byteOffset),t=e[1]-e[0];if(!(t>0&&e.every((D,p)=>p===0||D-e[p-1]===t)))return null;let[s,l]=A.split("|"),B=r[0].library?`_${T0.generateHashForLibraryName(r[0].library)}`:"DDE_";return{arrayName:s,subField:l,fields:r,startOffset:e[0],endOffset:e[e.length-1],step:t,formatType:hs(r[0]),pawnVarBase:`${B}${x}_${s}`}}function wE(x,A){let{standaloneFields:r,groupMap:e,usedFormats:t,hasInlineFields:a}=yE(A),s=[];for(let[l,B]of e){let{fields:D,formatType:p}=B;if(D.length<2){r.push(...D),t.add(p);continue}let j=_E(x,l,D);j?(t.add(p),s.push(j)):(r.push(...D),t.add(p))}return r.sort((l,B)=>l.byteOffset-B.byteOffset),{arrayGroups:s,standaloneFields:r,usedFormats:t,hasInlineFields:a}}function SE(x){let A=new Set;for(let[,r]of Object.entries(x.containers))if(oo(r))for(let e of r.fields){let t=hs(e);t&&A.add(t)}return A}function qE(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(tn),x(' sprintf(szTemp, _, "%d", value);'),x(nn),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(tn),x(' sprintf(szTemp, _, "%.3f", value);'),x(nn),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(tn),x(' sprintf(szTemp, _, "%s", value);'),x(nn),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(tn),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(nn),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function TE(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function $E(x,A,r){let e=`idx >= ${x} && idx <= ${A}`;if(r===1)return e;let t=x===0?`idx % ${r} == 0`:`(idx - ${x}) % ${r} == 0`;return`${e} && ${t}`}function PE(x,A){let{startOffset:r,endOffset:e,step:t,formatType:a,pawnVarBase:s,subField:l}=A,B=TE(r,t),D=$E(r,e,t);if(x(` if (${D}) {`),a==="bin"){let p=`${s}[${B}]${l}`,j=l?l.substring(1):"",g=j?`${s}_${j}_dim`:`${s}_dim`;x(` return _DDE_fmt_bin(aData, ${p}, ${g});`)}else x(` return _DDE_fmt_${a}(aData, ${s}[${B}]${l});`);x(" }")}function NE(x,A,r){if(r.type==="shadow"||r.shadowRef)return;let e=_A(r);if(!e||e==="skip")return;let a=`${r.library?`_${T0.generateHashForLibraryName(r.library)}`:"DDE_"}${A}_${r.name}`,s=ao(e);if(s==="bin")x(` case ${r.byteOffset}: return _DDE_fmt_bin(aData, ${a}, ${a}_dim);`);else if(s)x(` case ${r.byteOffset}: return _DDE_fmt_${s}(aData, ${a});`);else{if(x(` case ${r.byteOffset}: {`),e.printf){let l=a;e.printfFormat&&(l=`(${e.printfFormat}(${l}))`),x(` sprintf(szTemp, _, "${e.printf}", ${l});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function IE(x,A,r){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${r.title}(aData, idx);`),x(" }")}function so(x,A,r){let e=r===X0.ContainerType.cx?"c":"h",t=r===X0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${e}'){`),x(" switch(cname{1}) {");for(let[a,s]of Object.entries(A.containers))r===s.containerType&&a.startsWith(t)&&s.transferDirection!==io.backendOnly&&IE(x,a,s);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function ME(x,A){let r=wE(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),r.hasInlineFields&&x(" new szTemp{64};");for(let e of r.arrayGroups)PE(x,e);if(r.standaloneFields.length>0){x(" switch(idx) {");for(let e of r.standaloneFields)NE(x,A.title,e);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function LE(x,A){for(let[,r]of Object.entries(A.containers))oo(r)&&ME(x,r)}function Fo(x){let A=[],r=A.push.bind(A),e=SE(x);return qE(r,e),e.size>0&&r(""),r("stock DDE_get_local_data(cname{}, aData{}, idx) {"),so(r,x,X0.ContainerType.cx),so(r,x,X0.ContainerType.hx),r(" return OK;"),r("}"),LE(r,x),A.join(`
|
|
2758
|
-
`)}var
|
|
2759
|
-
`),O0=o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",cx.libraryName),sx=_x.Utils.joinPath(
|
|
2760
|
-
`)),O.log("Generated",o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=_x.Utils.joinPath(L,o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(L0,f0),O.log("Generated",o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(L,k,O)}v0.exportAutoDloFiles=M;async function N(L,k,O,W){let X=await Z.read(L,k),H=Z.isLibrary(X),V=_x.Utils.joinPath(L,o0.filePaths.dist.path,"dde-api.yaml");await k.rm(V).catch(()=>{});let n0=_x.Utils.joinPath(L,o0.filePaths.dist.ddeApi);if(await k.writeFile(n0,ms(W,X)),O.log("Generated",o0.filePaths.dist.ddeApi),H){let e0=_x.Utils.joinPath(L,o0.filePaths.dist.ddeApiPath,`${X.name}.yaml`),x0=ms(W,X,X.name);x0.length&&(await k.writeFile(e0,x0),O.log("Generated",o0.filePaths.dist.ddeApiPath+`${X.name}.yaml`))}}v0.exportOpenApi=N;async function z(L,k,O){let W=_x.Utils.joinPath(L,o0.filePaths.studio.auto.dlo.defaultInc),X=await Za(L,k);await k.writeFile(W,X),O.log("Generated",o0.filePaths.studio.auto.dlo.defaultInc)}v0.exportDefaultInc=z})(SA||={});async function vo(x,A,r){let e=[],t=await Bx.getAll(r);for(let a in t){let s=Bx.dependencyToPath(x,a),l=Bx.dependencyIdToName(a),B=_x.Utils.joinPath(s,`${bt}/${l}.dde`);await A.stat(B)&&e.push({libraryName:l,path:B,yaml:await SA.readYamlFile(B,A)})}if(Z.isLibrary(r)){let a=_x.Utils.joinPath(x,`/${bt}/${r.name}.dde`);await A.stat(a)&&e.push({libraryName:r.name,path:a,yaml:await SA.readYamlFile(a,A)})}return e}function RE(x,A,r){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let e=x[A];if(typeof e=="string")return e;if(typeof e!="object"||e===null)return"";let t=r?.missingProperty;return t?e[t]??"":""}function OE(x,A,r,e){let a={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${e?.patternErrorMessage??r}`,minimum:()=>`${r}.`,maximum:()=>`${r}.`,exclusiveMinimum:()=>`${r}.`,exclusiveMaximum:()=>`${r}.`,not:()=>`This value is not allowed here. ${e?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${e?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${e?.description??""}`.trimEnd()}[x];return a?a():r}function GE(x){let A=x.instancePath||"/",r=x.parentSchema,e=RE(r?.errorMessage,x.keyword,x.params);if(e)return`${A}: ${e}`;let t=x.message||"unknown validation error";return`${A}: ${OE(x.keyword,x.params,t,r)}`}function UE(x,A){let r=A.split("/").filter(Boolean).map(e=>{let t=Number(e);return Number.isNaN(t)?e:t});for(let e=r.length;e>=0;e--){let t=r.slice(0,e),a=x.getIn(t,!0);if(a?.range)return a.range}return null}function HE(x,A,r){let e=UE(x,r.instancePath||"");return e?Eo(A,e):{line:0,startCharacter:0,endCharacter:0}}var gs=require("vscode-uri");var We=class{dloFileMap={};rootUri=gs.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let r=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();r=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,r))return this.dloFileMap[r];let e=T0.generateHashForFilePath(r);return this.dloFileMap[r]=e,e}getFilePathForSequence(A){let r=Object.entries(this.dloFileMap).find(([,e])=>e===A);return r?gs.URI.parse(`${this.rootUri.path}${r[0]}`).path:null}};var bo=require("vscode-uri");function ks(x){return x.replace(/\\/g,"/").split("/").pop()??""}function xe(x){return/\.spec\.dlo$/i.test(ks(x))}function pt(x,A){let r=ks(x);if(!r)return!1;if(xe(r))return!0;let e=A?.dlo?.mainFile;return e?ks(e)===r:r==="main.dlo"}var JE=/^\s*#define\s+TEST_OWN_MAIN\b/m;function KE(x){return JE.test(x)}function an(x,A){if(!xe(x))return[];let r=["DLO_TEST_SPEC=1"];return A!==void 0&&KE(A)&&r.push("TEST_OWN_MAIN=1"),r}var jt="__it_";var Fn=31-jt.length-4;function Bo(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function on(x,A=Fn){let r=Bo(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return Bo(r.substring(0,Math.max(0,A)))}function vn(x,A){let r=on(x);if(!r||!A.has(r))return r;for(let e=2;;e++){let t=`_${e}`,a=`${on(x,Fn-t.length)}${t}`;if(!A.has(a))return a}}function fn(x){return`${jt}${x}`}function ln(x,A){return`${jt}${x}__${A}`}function En(x,A){return`// @it ${x} "${A}"`}var co=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var VE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,WE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,XE=/^(?:\s*#ifdef\s+)(.*)$/,YE=/^(?:\s*#ifndef\s+)(.*)$/,QE=/^(?:\s*#elseifdef\s+)(.*)$/,ZE=/^(?:\s*#elseifndef\s+)(.*)$/,po=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,jo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,mo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ho=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,go=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,xB=/^\s*#include\s*</,AB=/^\s*#endinput\s*/,rB=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,ko=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,yo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Co(x,A=""){let r=" ",e=x;return A.length?r={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(r=x.substring(1,1),e=`"${x.substring(2,x.length-1)}"`),{priority:`'${r}'`,code:e}}var _o=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,wo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(wo||{}),eB=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,tB=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,nB=/^(.*)(^|\s*)onUplinkEvent/,sB=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,iB=/^\s*#callback\s+\w+\s*\(/;function Do(x){let A=0,r=!1,e="";for(let t=0;t<x.length;t++){let a=x[t];if(r){if(a==="\\"){t++;continue}a===e&&(r=!1);continue}if(a==='"'||a==="'"){r=!0,e=a;continue}a==="("?A++:a===")"&&A--}return A}function So(x){return po.test(x)||ho.test(x)||jo.test(x)||mo.test(x)||go.test(x)||ko.test(x)||yo.test(x)||_o.test(x)}function aB(x,A,r){if(!(sB.test(r)||iB.test(r)))return null;let t=Do(r);if(t<=0)return null;let a=t,s=[x[A]],l=[r],B=A+1,D=100;for(;a>0&&B<x.length&&B-A<D;){let g=x[B],q=g.split("//",1)[0];s.push(g),l.push(q),a+=Do(q),B++}if(s.length<=1||a>0)return null;let p=s.map((g,q)=>q===0?g:g.trim()).join(" "),j=l.map((g,q)=>q===0?g:g.trim()).join(" ");return So(j)?{joinedOriginal:p,joinedStripped:j,extraLineCount:s.length-1}:null}var qo=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,To=String.raw`"((?:[^"\\]|\\.)*)"`,oB=new RegExp(String.raw`^(\s*)IT\s*\(\s*${To}\s*\)(.*)$`),FB=new RegExp(String.raw`^\s*IT\s*\(\s*${qo}\s*,\s*${To}\s*\)`),vB=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,fB=new RegExp(String.raw`^\s*STEP\s*\(\s*${qo}\s*,(\s*)\d+\s*\)`),ys=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;rewrite(A){return this.rewriteIt(A)??this.rewriteStep(A)}rewriteIt(A){let r=oB.exec(A);if(!r)return this.checkItTwoArg(A);let[,e,t,a]=r,s=vn(t,this.slugs);return s?(this.slugs.add(s),this.currentSlug=s,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),{line:`${uo(e,fn(s),a)} ${En(s,t)}`,diagnostics:[]}):{line:null,diagnostics:[{level:"error",message:`IT("${t}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let r=FB.exec(A);return!r||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),!r[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${r[1]}") without an id, or drop the comma.`}]}}rewriteStep(A){let r=vB.exec(A);if(!r)return this.checkStepTwoArg(A);let[,e,t,a]=r,s=Number(t),l=this.stepError(s);return l?{line:null,diagnostics:[{level:"error",message:l}]}:(this.stepsOfCurrent.add(s),{line:uo(e,ln(this.currentSlug,s),a),diagnostics:[]})}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let r=fB.exec(A);return!r||!r[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function lB(x){let A="";for(let r=0;r<x.length;r++){let e=x[r];if(A)e==="\\"?r++:e===A&&(A="");else if(e==='"'||e==="'")A=e;else if(e==="/"&&x[r+1]==="/")return x.substring(0,r)}return x}function uo(x,A,r){let e=r.trim(),t=e?" "+e:"";return`${x}public ${A}()${t}`}var Xe=class{pragmaDynamic=null;dloFileSequencer=new We;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,r,e,t,a){this.dloFileSequencer.workspacePath=A;let s=[],l=t.path,B=!1,D=bo.Utils.basename(t);if(l.includes(o0.filePaths.studio.auto.dlo.path)){let P=D.substring(0,D.length-8);!["app","main"].includes(P)&&D.endsWith("-dde.inc")&&(B=T0.generateHashForLibraryName(P))}else if(l.includes(o0.filePaths.studio.libdeps)){let P=l.split("libdeps/")[1],[T]=P.split("/");["dlo-core"].includes(T)||(B=T0.generateHashForLibraryName(T))}else Z.isLibrary(e)&&(D.endsWith(".dlo")||l.includes("/dlo/examples/")||l.includes("/dlo/test/")?r.log("Skipping dde mangling for project file",D):B=T0.generateHashForLibraryName(e.name));if(l.endsWith(".auto/default.inc"))return{data:a.join(`
|
|
2761
|
-
`),diagnostics:s};let
|
|
2753
|
+
`)}function s(l,E,D=!1){let b=Xa(E)?"":'"';D&&(b=""),t(`#define ${l} ${b}${E}${b}`)}return aE(a,s,r),oE(t,a,s,A),lE(t,a,x),EE(t,a,x),e.join(`
|
|
2754
|
+
`)}var Dt=class{constructor(A,r,e){this.manifest=A;this.ddeMap=r;this.context=e;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,r){r&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(r||A)),r&&A===">"&&this.pawnIndent++}generate(){for(let[A,r]of Object.entries(this.ddeMap.containers))this.context&&!r.libraries.includes(this.context)||!bs(r.containerType,r.transferDirection)||!r.fields||!this.context&&!X0.hasContainerAppFields(r)||dt[A].ctype!==Vx.cx&&this.context||(this.generateGlobalVarsForContainer(r),this.generateReadWriteFunctions(r));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,r,e=""){this.sourceType="globalVariables";let t=r?this.variableNameForPawnDefinition(A,r):A;if(r){let a=this.generateCommentForField(r);a&&(Array.isArray(a)?(this.pawn("/**"),a.forEach(s=>{this.pawn(` * ${s}`)}),this.pawn(" */")):this.pawn(`// ${a}`))}this.pawn(`stock ${t}${r?this.initialiserForGlobalVar(r):e};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let r=`DDE_${A.title}`,e=this.createFieldDefaultDefines(r,A);this.generateArrayDefines(r,A,e);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let a=this.generateFieldVariableName(r,t);this.createGlobalVar(`${a}`,t)}}createFieldDefaultDefines(A,r){let e=new Map;for(let t of r.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let a=r.arrays[t.arrayRef.name],s=`${A}_${t.arrayRef.name}`,l="";a.fields?.length&&(l=t.name.split(".")[1],s+=`_${l}`),this.createDefaultDefineForField(s,t),t.defaultDloDefine!==void 0&&(e.has(t.arrayRef.name)||e.set(t.arrayRef.name,new Map),e.get(t.arrayRef.name).set(l,t))}return e}isPlainCellField(A){if(A.type==="struct"||!Ct[A.type])return!1;let r=_A(A);return!r||r==="skip"?!1:!`${r.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let r=A?.get("");return r?.defaultDloDefine===void 0||!this.isPlainCellField(r)?"":` = [ ${r.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,r){if(!r?.size||!A.fields?.length)return"";let e=[];for(let a of A.fields){let s=r.get(a.name);if(s!==void 0&&!this.isPlainCellField(s)||!this.isPlainCellField({type:a.type}))return"";e.push(s?.defaultDloDefine??"0")}let t=`[ ${e.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,r,e){for(let t of Object.values(r.arrays)){if(this.context!==t.library)continue;let a=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${a} ${t.length}`),t.fields){for(let E of t.fields)Ct[E.type]?.isBlob&&E.byteSize&&this.addDefine(`${A}_${t.name}_${E.name}_dim`,E.byteSize);let s={...r};s.fields=[],t.fields.forEach(E=>{s.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:E.byteSize,id:E.name,library:t.library,name:E.name,type:E.type,title:null,index:0})});let l=`${A}_${t.name}_def`;this.generateTypeDefinitions(s,l),this.createGlobalVar(`${A}_${t.name}[${a}][${l}]`,void 0,this.structuredArrayInitialiser(t,e.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${a}]`,void 0,this.simpleArrayInitialiser(e.get(t.name)))}}generateCommentForField(A){let r=[`@type ${A.type}`];if(A.description&&r.unshift(A.description),A.defaultValue!==void 0){let{value:e,reason:t}=this.parseFieldDefault(A);r.push(`@default ${e} ${t||""}`)}return r}generateFieldVariableName(A,r){let e=`${A}_${r.name}`,t=Object.hasOwn(Ct,r.type)&&Ct[r.type].isBlob,a=r.byteSize;return a&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${r.name}_dim ${a}`),this.pawn(`#define ${A}_${r.name}_iter() for(new i=0;i<${a};i++)`)),this.sourceType="globalVariables",e}generateTypeDefinitions(A,r){this.sourceType="defines";let e=A.fields;if(!e)return;let t=[];this.pawn(">",`#define ${r} [`);for(let a of e){let s=this.generateFieldTypeDefinition(a,A,t,r);s!==null&&this.pawn(s)}this.pawn("<","]")}handleArrayFieldDedup(A,r,e,t){let a=A.arrayRef;if(a){let E=r.arrays[a.name];if(!e.includes(a.name)&&!E.fields)e.push(a.name);else return null}let s=A.arrayRef?A.arrayRef.name:A.name,l=A.arrayRef?`[${t}_${s}_dim]`:"";return{fieldName:s,fld_dim:l}}generateFieldTypeDefinition(A,r,e,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let a=this.handleArrayFieldDedup(A,r,e,t);if(a===null)return null;let{fieldName:s,fld_dim:l}=a,E="";if(A.type==="struct")E="// ."+s+l;else{let D=_A(A);if(!D)return null;D==="skip"?E=`// skipped - .${s}${l}`:E+=D.rwp.replace("%n",`.${s}${l}`).replace("%l",A.byteSize)}return E+=",",A.library&&(E+=` // declared by ${A.library} library`),E}variableNameForPawnDefinition(A,r){let e=_A(r);return e&&e!=="skip"?e.rwp.replace("%n",`${A}`).replace("%l",r.byteSize):A}createDefaultDefineForField(A,r){if(this.sourceType="defaultDefines",r.scale!==void 0&&this.addDefine(`${A}_scale`,r.scale),r.offset!==void 0&&this.addDefine(`${A}_offset`,r.offset),r.defaultValue!==void 0&&iE(r)){let{value:e,reason:t}=this.parseFieldDefault(r),a=`${A}_default`;this.addDefine(a,e,t)&&(r.defaultDloDefine=a)}}addDefine(A,r,e){return Bt.exec(`${r}`)?!1:(this.knownDefines.includes(A)||(e&&this.pawn(`// ${e}`),this.pawn(`#define ${A} ${r}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let r=A.name,e=dt[r],t=`DDE_${A.containerType===Vx.aloha?Vx.aloha:A.title}`;[J0.both,J0.bothPlus,J0.none,J0.deviceOnly,J0.up,J0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),e.ctype===Vx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,r){this.sourceType="readWrite";let e=`DDE_${r.title}_id`,t=[Vx.hx,Vx.aloha].includes(r.containerType),a=r.containerType===Vx.hx,s=r.containerType===Vx.aloha,l=`_${A}_write`,E=ps(this.manifest)?", flags":"",D=a?`stamp${E}`:"",b=ps(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${l}(${a?b:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${s?Vx.aloha:r.title}_id);`),this.generateRWFunctionBody(A,r,"dde_w"),t&&this.pawn(`return dde_wend(${D});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let j=`${A}_transfer`,g=`${A}_persist`,q=this.functionArgumentsForDdeWrite(a,t);if(this.pawn(">",`${this.context?"stock ":""}${j}(${q}) {`),t)this.pawn(`${l}(${D});`);else{let S=r.name.slice(-1);this.pawn(`dde_flush(${S}, immediate);`)}this.pawn("<","}"),this.pawn(""),r.volatile&&(this.pawn(">",`stock ${g}() {`),this.pawn(`return rM2M_CfgFlush(${e});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,r){let e=ps(this.manifest)?", const flags=0":"";return A?`const stamp=0${e}`:r?"":"bool:immediate=false"}generateReadMethod(A,r){this.sourceType="readWrite";let e=`_${A}_read`;this.pawn(">",`stock ${e}() {`),this.generateRWFunctionBody(A,r,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,r,e,t,a,s,l){if(!r.arrayRef)return this.emitSingleField(A,r,e,t,l);let E=r.arrayRef.name,D=a.get(E);return D?s.has(E)?l:(s.add(E),this.emitArrayLoop(A,D,e)):this.emitSingleField(A,r,e,t,l)}generateRWFunctionBody(A,r,e){let t=r.fields,a=this.analyzeArrayGroups(t,A,r),s=new Set,l=-1;for(let E of t){if(this.isFieldSkipped(E))continue;let D=_A(E);!D||D==="skip"||(l=this.emitFieldRW(A,E,e,D,a,s,l))}}defaultArgumentFor(A,r){return A.defaultDloDefine===void 0?"":r==="dde_r"||nE(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,r,e,t,a){r.byteOffset!==a&&this.pawn(`_dde_idx = ${r.byteOffset};`);let s="";s+=e,s+=t.rwfunc;let l=`${A}_${r.name}`;return s+=`(${l}`,t.rwlen&&(s+=`, ${r.byteSize}`),s+=this.defaultArgumentFor(r,e),this.pawn(s+");"),r.byteOffset+r.byteSize}emitArrayLoop(A,r,e){this.pawn(">",`for (new _i = 0; _i < ${r.dimDefine}; _i++) {`);let t=-1;for(let a of r.templateFields){let s=_A(a);if(!s||s==="skip")continue;let l=a.byteOffset;l!==t&&this.pawn(`_dde_idx = ${l} + (_i * ${r.stride});`),t=l+a.byteSize;let E=`${A}_${a.name.replace(/\[\d+\]/,"[_i]")}`,D=`${e}${s.rwfunc}(${E}`;s.rwlen&&(D+=`, ${a.byteSize}`),D+=this.defaultArgumentFor(a,e),this.pawn(D+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,r,e){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,r,e)}collectArrayFieldsByIndex(A){let r=new Map;for(let e of A){if(this.isFieldSkipped(e)||!e.arrayRef)continue;let t=_A(e);if(!t||t==="skip")continue;let{name:a,index:s}=e.arrayRef;r.has(a)||r.set(a,new Map);let l=r.get(a);l.has(s)||l.set(s,[]),l.get(s).push(e)}return r}validateArrayStride(A,r){let e=r[0].byteOffset-A[0].byteOffset;if(e<=0)return null;for(let t=0;t<A.length;t++)if(r[t].byteOffset-A[t].byteOffset!==e)return null;return e}buildArrayGroups(A,r,e){let t=new Map;for(let[a,s]of A){let l=e.arrays[a];if(!l||l.length<2)continue;let E=s.get(0),D=s.get(1);if(!E||!D||E.length===0||D.length===0||E.length!==D.length)continue;let b=this.validateArrayStride(E,D);b!==null&&t.set(a,{arrayName:a,dimDefine:`${r}_${a}_dim`,stride:b,templateFields:E})}return t}parseFieldDefault(A){let r=_A(A),e=A.defaultValue;function t(s,l){return{value:s,reason:l}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${e}"`);case"wstring":return t(`''${e}''`);case"ustring":return t(`/* default not supported: ${e} */`);case"binary":{let l=`{ 0x${(e.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(l)}}if(e==="NaN"){let s=r.rwfunc;return t(`${s}_NaN`.toUpperCase())}let a=this.parseFieldScaleOffset(A);return a?t(a.calculated,a.reason):(e!==void 0&&!Bt.exec(`${e}`)&&A.type.startsWith("float")&&e%1===0&&(e=e.toFixed(A.decimalPlaces||1)),t(`${e}`))}parseFieldScaleOffset(A){let r=A.defaultValue;if(!(!!Bt.exec(`${A.offset}`)||!!Bt.exec(`${A.scale}`)||!!Bt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,a=A.scale!==void 0?Number(A.scale):1;if(a===0)return null;let s=(Number(r)-t)/a,l=`(defaultValue - offset) / scale -> (${r} - ${t}) / ${a}`;return A.type.startsWith("float")?s%1===0&&(s=s.toFixed(1)):(s=Math.round(s),l=`Rounded value of: ${l}`),{calculated:s,reason:l}}return null}};function BE(x){return`${`onUplinkApply_${x}()`};`}function Qa(x,A,r){A.libraries.forEach(e=>{let t=T0.generateHashForLibraryName(e);x(` #ifdef _${t}${r}_${A.title}`),x(` _${t}${r}_${A.title}(); // ${e}`),x(" #endif")})}function cE(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(r=>{let t=`_${T0.generateHashForLibraryName(r)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function CE(x){let A=[],r=[];for(let[e,t]of Object.entries(x.containers))dt[e].ctype===Vx.cx&&([J0.up,J0.upPlus,J0.deviceOnly].includes(t.transferDirection)&&r.push(t),[J0.bothPlus,J0.both,J0.downPlus,J0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:r}}function dE(x,A){A.length&&x("");for(let r of A)r.knownNames.forEach(e=>{x(`forward onUplinkRestore_${e}();`)}),x(""),x(`stock restoreUplink${r.name}() {`),x(` _DDE_${r.name}_read();`),Qa(x,r,"Restore"),X0.hasContainerAppFields(r)&&x(` onUplinkRestore_${r.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let r of A)x(` case DDE_${r.title}_id: restoreUplink${r.name}(); // ${r.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function DE(x,A){A.length&&x("");for(let r of A)r.knownNames.forEach(e=>{x(`forward onUplinkApply_${e}();`)}),x(""),x(`stock applyUplink${r.name}() {`),x(` _DDE_${r.name}_read();`),Qa(x,r,"Apply"),X0.hasContainerAppFields(r)&&x(` ${BE(r.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let r of A)x(` case DDE_${r.title}_id: return applyUplink${r.name}(); // ${r.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function Za(x,A){let r=[],e=r.push.bind(r);cE(e,A);let{containerApply:t,containerRestore:a}=CE(x);return dE(e,a),DE(e,t),r.join(`
|
|
2755
|
+
`)}var uE=eE.map(x=>`_DDE_${x}_write`);function xo(x){let A=[],r=A.push.bind(A),e=[...uE];for(let[t,a]of Object.entries(x.containers)){let s=bs(a.containerType,a.transferDirection),l=dt[t];if(!s||!a.fields||l.ctype!==Vx.cx)continue;let E=`DDE_${a.name}`,D=`DDE_${a.title}_id`;if([J0.both,J0.bothPlus,J0.none,J0.deviceOnly,J0.up,J0.upPlus].includes(a.transferDirection)){let b=`_${E}_write`;r(`stock ${b}() {`),r(` dde_wbegin(${D});`),Wa(r,a,"write"),r(" return dde_wend();"),r("}"),e.splice(e.indexOf(b),1)}if(l.ctype===Vx.cx){let b=`_${E}_read`;r(`stock ${b}() {`),r(` if (dde_rbegin(${D})) return ERROR;`),Wa(r,a,"read"),r(" dde_rend();"),r(" return OK;"),r("}")}}if(e.length){r(""),r("// Dummy functions needed by the dde library");for(let t of e)r(`stock ${t}() { return OK; }`)}return A.join(`
|
|
2756
|
+
`)}function Wa(x,A,r){A.libraries.forEach(e=>{let t=T0.generateHashForLibraryName(e);x(` #ifdef __${t}${A.title}_${r}`),x(` __${t}${A.title}_${r}();`),x(" #endif")}),X0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${r}`),x(` _DDE_${A.title}_${r}();`),x(" #endif"))}async function Ao(x,A){let r=[],e=await Bx.getApmPartDependencies(x,A,S0.Part.dlo,!0);await ct(x,A,r,o0.fileNames.autoInc);let t=await pE(x,A,e);for(let a of e)a.name==="local-data-interface"&&await ct(x,A,r,o0.fileNames.autoLocalDataInc),r.push(`#include <${a.name}>`),a.name==="dlo-core"&&(r.push(...t),await ct(x,A,r,o0.fileNames.autoDdeInc.replace("X","app")),await ct(x,A,r,o0.fileNames.autoDdeInc.replace("X","main")));return e.some(a=>a.name==="dlo-core")&&await ct(x,A,r,o0.fileNames.autoUplinkInc),r.join(`
|
|
2757
|
+
`)}async function pE(x,A,r){let e=[];for(let t of r){let a=o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(js.Utils.joinPath(x,a))&&e.push(`#include "${o0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return e}async function ct(x,A,r,e){let t=js.Utils.joinPath(x,o0.filePaths.studio.auto.dlo.path,e);await A.stat(t)&&r.push(`#include "${e}"`)}var eo=nx(require("semver")),to=require("yaml");var wA=X0.ContainerType,en=X0.TransferDirection,bE=X0.fieldTypeDefinitions,Ve={$ref:"#/components/parameters/contextId"},jE={$ref:"#/components/parameters/addonId"},mE={$ref:"#/components/parameters/appId"},ro={$ref:"#/components/schemas/histdataResponse"},hE={$ref:"#/components/schemas/histdataRequest"},tn={$ref:"#/components/schemas/rapidM2MStamp"},gE={$ref:"#/components/schemas/timeseriesRequestBase"},kE={$ref:"#/components/headers/xMtBackfill"},yE="x-mt-backfill",hs={[yE]:kE},rn="rapidM2M Stamp",YA={description:"Successful operation"},no={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}},headers:{xMtBackfill:{description:["Only set by the local PoV API of the companion app, never by the myDatanet server.",'Present (value "pending") while the companion app is still fetching the requested time range from the device (on-demand backfill).',"The body is always answered immediately from the local data mirror in the normal shape; the loading signal lives only in this header.","Clients should show a loading indicator and re-issue the same request (poll) until the header disappears - every poll reads the by-then-larger mirror.",'A backfill is only armed by an explicit "from" stamp in the request; a request without "from" or with from: "*" never triggers a device fetch.',"The header is absent when the range is already local, the fetch completed within the internal grace wait, no device is connected, the connected device belongs to another site, the fetch failed (15 s cooldown before retry) or the device no longer retains the range.",'A range the device no longer holds simply stays empty and should be rendered as an empty/partial result, not as an error. Deep ranges can stay "pending" for a while, a completed depth is persisted and never fetched twice.'].join(" "),schema:{type:"string",enum:["pending"]}}}},so={...structuredClone(no)};Object.assign(so.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[tn,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:rn,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:rn,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:rn,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:rn,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var ut={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Zr={401:{description:"Permission denied",...ut},403:{description:"Forbidden",...ut},404:{description:"Resource not found",...ut},500:{description:"Internal error",...ut}};function gs(x,A,r=null){let e=eo.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:e||""},tags:[],paths:{},components:{parameters:{},schemas:{},headers:{}}};r?Object.assign(t.components,structuredClone(no)):Object.assign(t.components,structuredClone(so));let a=Z.isAddon(A),s=Z.isAnalytics(A);a&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let l of Object.values(x.containers))r&&(!l.libraries.includes(r)||l.containerType===wA.hx)||!r&&!X0.hasContainerAppFields(l)||l.containerType===wA.aloha||(_E(t,l),SE(t,l,r),$E(t,l,a,s),!a&&!s&&(wE(t,l,r),TE(t,l)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,to.stringify)(t)}function _E(x,A){x.tags.push({name:uA(A.title),description:`Transfer direction ${A.transferDirection}`})}function uA(x){return x.split("_").join(" ")}function wE(x,A,r){let e=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},a=[];A.containerType===wA.hx&&(e+="Select",a.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let s of A.fields)s.library!==r||s.type==="shadow"||(A.containerType===wA.hx?t.properties.select.items.enum.push(s.id):(t.properties[s.id]=io(s),!s.readPermission&&!s.writePermission&&a.push(s.id)));t.required=a.length?a:void 0,x.components.schemas[e]=t}function SE(x,A,r=null){let e=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},a=[],s=A.containerType===wA.hx;for(let E of A.fields)E.library!==r||E.type==="shadow"||(t.properties[E.name]=io(E),!E.readPermission&&!E.writePermission&&a.push(E.name));t.required=a.length?a:void 0,x.components.schemas[e]=t;let l=t.properties;if(s){t.required=t.required?.map(D=>D.toLowerCase());let E={};for(let[D,b]of Object.entries(t.properties))E[D.toLowerCase()]=b;t.properties=E}if(s){let E={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(l)}}}};x.components.schemas[`${e}RequestSingle`]=E,x.components.schemas[`${e}Request`]={allOf:[gE,E]},t.properties.stamp=tn,a.push("stamp")}}function io(x){let r={...bE[x.type].openApi},e=qE(x);return r.default=e,r.example=e,r.description=x.description,r}function qE(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function TE(x,A){let r=`/api/1/sites/{siteUid}/${A.name}`,e={get:void 0,put:void 0};if([wA.cx,wA.cb].includes(A.containerType))e.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[Ve],responses:{200:{...YA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:tn}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Zr}},[en.down,en.backendOnly].includes(A.transferDirection)&&(e.put={deprecated:!0,tags:[uA(A.title)],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[Ve],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...YA},204:{...YA},...Zr}});else if(A.containerType===wA.hx){let t=`${r}`;r+="/youngest",e.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the youngest data of the "${uA(A.title)}" container`,parameters:[Ve,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...YA,content:{"application/json":{schema:ro}}},...Zr}},x.paths[t]={get:{deprecated:!0,tags:[uA(A.title)],summary:`Get the historical data of the "${uA(A.title)}" container.`,parameters:[Ve,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},hE]}}],responses:{200:{...YA,headers:hs,content:{"application/json":{schema:ro}}},...Zr}}}}x.paths[r]=e}function $E(x,A,r=!1,e=!1){let a=A.containerType===wA.hx?"timeseries":"containers",s=[],l=uA(A.title);e||s.push({path:`/api/1/sites/{siteUid}/${a}/${A.title}`,params:[Ve],tags:[l]}),r&&(s=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${a}/${A.title}`,params:[Ve,jE],tags:[l]}]);let E={path:`/api/1/app-center/apps/{appUid}/${a}/${A.title}`,params:[mE],tags:["app-center"]};e&&E.tags.push(l),s.push(E);let D={get:void 0,put:void 0,post:void 0},b={tags:[],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[],responses:{200:{...YA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:tn}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Zr}};if([wA.cx,wA.cb].includes(A.containerType)&&(D.get=b,[en.down,en.backendOnly].includes(A.transferDirection)&&(D.put={tags:[],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...YA},204:{...YA},...Zr}}),s.forEach(j=>{let g=structuredClone(D);Object.values(g).forEach(q=>{q?.parameters?.unshift(...j.params),q?.tags?.unshift(...j.tags)}),x.paths[j.path]=g})),A.containerType===wA.hx){D.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...YA,headers:hs,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Zr}},r&&(D.post={tags:[],summary:`Insert data into the "${uA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...YA},400:{description:"Bad request",...ut},...Zr}});let j=s[0],g=structuredClone(D);Object.values(g).forEach(z=>{z?.parameters?.unshift(...j.params),z?.tags?.unshift(...j.tags)}),x.paths[j.path]=g;let q={...YA,headers:hs,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},S=`${j.path}/youngest`,P={get:structuredClone(g.get)};P.get.summary=`Get the youngest record of "${A.title}" container`,P.get.responses[200]=q;let T=r?2:1;P.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[S]=P;let M=`${j.path}/oldest`,N={get:structuredClone(g.get)};N.get.summary=`Get the oldest record of "${A.title}" container`,N.get.responses[200]=q,N.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[M]=N}}var oo=X0.TransferDirection,nn=" new szTemp{64};",sn=" return strcat(aData, szTemp, sizeof(szTemp));";function Fo(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",r=A.includes("["),t=A.includes("{")||r;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return r?null:"s";default:return null}}function ks(x){if(x.type==="shadow"||x.shadowRef)return null;let A=_A(x);return!A||A==="skip"?null:Fo(A)}function vo(x){return[X0.ContainerType.hx,X0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==oo.backendOnly}function PE(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=_A(x);return!!A&&A!=="skip"}function NE(x,A,r){let e=x.name.indexOf("]"),t=e>=0?x.name.substring(e+1):"",a=`${x.arrayRef.name}|${t}|${A}`;r.has(a)||r.set(a,{fields:[],formatType:A}),r.get(a).fields.push(x)}function IE(x){let A=[],r=new Map,e=new Set,t=!1;for(let a of x){if(!PE(a))continue;let s=ks(a);a.arrayRef&&s?NE(a,s,r):(A.push(a),s?e.add(s):t=!0)}return{standaloneFields:A,groupMap:r,usedFormats:e,hasInlineFields:t}}function ME(x,A,r){r.sort((D,b)=>D.arrayRef.index-b.arrayRef.index);let e=r.map(D=>D.byteOffset),t=e[1]-e[0];if(!(t>0&&e.every((D,b)=>b===0||D-e[b-1]===t)))return null;let[s,l]=A.split("|"),E=r[0].library?`_${T0.generateHashForLibraryName(r[0].library)}`:"DDE_";return{arrayName:s,subField:l,fields:r,startOffset:e[0],endOffset:e[e.length-1],step:t,formatType:ks(r[0]),pawnVarBase:`${E}${x}_${s}`}}function LE(x,A){let{standaloneFields:r,groupMap:e,usedFormats:t,hasInlineFields:a}=IE(A),s=[];for(let[l,E]of e){let{fields:D,formatType:b}=E;if(D.length<2){r.push(...D),t.add(b);continue}let j=ME(x,l,D);j?(t.add(b),s.push(j)):(r.push(...D),t.add(b))}return r.sort((l,E)=>l.byteOffset-E.byteOffset),{arrayGroups:s,standaloneFields:r,usedFormats:t,hasInlineFields:a}}function RE(x){let A=new Set;for(let[,r]of Object.entries(x.containers))if(vo(r))for(let e of r.fields){let t=ks(e);t&&A.add(t)}return A}function OE(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(nn),x(' sprintf(szTemp, _, "%d", value);'),x(sn),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(nn),x(' sprintf(szTemp, _, "%.3f", value);'),x(sn),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(nn),x(' sprintf(szTemp, _, "%s", value);'),x(sn),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(nn),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(sn),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function GE(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function UE(x,A,r){let e=`idx >= ${x} && idx <= ${A}`;if(r===1)return e;let t=x===0?`idx % ${r} == 0`:`(idx - ${x}) % ${r} == 0`;return`${e} && ${t}`}function HE(x,A){let{startOffset:r,endOffset:e,step:t,formatType:a,pawnVarBase:s,subField:l}=A,E=GE(r,t),D=UE(r,e,t);if(x(` if (${D}) {`),a==="bin"){let b=`${s}[${E}]${l}`,j=l?l.substring(1):"",g=j?`${s}_${j}_dim`:`${s}_dim`;x(` return _DDE_fmt_bin(aData, ${b}, ${g});`)}else x(` return _DDE_fmt_${a}(aData, ${s}[${E}]${l});`);x(" }")}function KE(x,A,r){if(r.type==="shadow"||r.shadowRef)return;let e=_A(r);if(!e||e==="skip")return;let a=`${r.library?`_${T0.generateHashForLibraryName(r.library)}`:"DDE_"}${A}_${r.name}`,s=Fo(e);if(s==="bin")x(` case ${r.byteOffset}: return _DDE_fmt_bin(aData, ${a}, ${a}_dim);`);else if(s)x(` case ${r.byteOffset}: return _DDE_fmt_${s}(aData, ${a});`);else{if(x(` case ${r.byteOffset}: {`),e.printf){let l=a;e.printfFormat&&(l=`(${e.printfFormat}(${l}))`),x(` sprintf(szTemp, _, "${e.printf}", ${l});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function JE(x,A,r){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${r.title}(aData, idx);`),x(" }")}function ao(x,A,r){let e=r===X0.ContainerType.cx?"c":"h",t=r===X0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${e}'){`),x(" switch(cname{1}) {");for(let[a,s]of Object.entries(A.containers))r===s.containerType&&a.startsWith(t)&&s.transferDirection!==oo.backendOnly&&JE(x,a,s);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function zE(x,A){let r=LE(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),r.hasInlineFields&&x(" new szTemp{64};");for(let e of r.arrayGroups)HE(x,e);if(r.standaloneFields.length>0){x(" switch(idx) {");for(let e of r.standaloneFields)KE(x,A.title,e);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function VE(x,A){for(let[,r]of Object.entries(A.containers))vo(r)&&zE(x,r)}function fo(x){let A=[],r=A.push.bind(A),e=RE(x);return OE(r,e),e.size>0&&r(""),r("stock DDE_get_local_data(cname{}, aData{}, idx) {"),ao(r,x,X0.ContainerType.cx),ao(r,x,X0.ContainerType.hx),r(" return OK;"),r("}"),VE(r,x),A.join(`
|
|
2758
|
+
`)}var co=T0.yamlRangeToLineInformation,pt=o0.filePaths.dde.path,SA;(v0=>{let x=X0.DDEJson,A=T0.convertBlobToString;v0.DDE_SCHEMA=Ja;async function e(R,k){let O=await k.readFile(R);return A(O)}v0.readYamlFile=e;async function t(R,k,O=o0.fileNames.mainDDE,V){let X=[],H=await Z.read(R,k),W=await lo(R,k,H);if(V)for(let x0 of W){let{result:f0,unresolvedKeys:U}=yx.replaceDefineTemplates(x0.yaml,V);x0.yaml=f0;for(let F0 of U)X.push({file:x0.path,level:"error",message:`Unresolved define template: {{${F0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let x0 of W)X.push(...E(x0.path,x0.yaml));let n0=_x.Utils.joinPath(R,pt,O),e0=await e(n0,k);if(V){let{result:x0,unresolvedKeys:f0}=yx.replaceDefineTemplates(e0,V);e0=x0;for(let U of f0)X.push({file:n0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return X.push(...E(n0,e0)),{manifest:H,libraryFiles:W,main:{path:n0,yaml:e0},diagnostics:X}}v0.validate=t;async function a(R,k,O,V=o0.fileNames.mainDDE){let X=await Z.read(R,k),H=await yx.read(R,k,O),W=await t(R,k,V,H.flat);if(W.diagnostics.filter(p0=>p0.level==="error").length>0)return{ddeJSON:null,diagnostics:W.diagnostics};let e0=await q(R,k,O),x0=new Zt.PreCompiler(X,W.libraryFiles,e0),f0=x0.parseLibraries();if(f0.find(p0=>p0.level==="error"))return{ddeJSON:null,diagnostics:[...W.diagnostics,...f0]};let{ddeJSON:F0,diagnostics:E0}=x0.parseMainDDE(W.main.path,W.main.yaml);return{ddeJSON:F0,diagnostics:[...W.diagnostics,...E0]}}v0.compileDDE=a;let s=new Eo.default({strict:!1,allErrors:!0,verbose:!0});(0,Bo.default)(s);let l=s.compile(v0.DDE_SCHEMA);function E(R,k){let O=new an.LineCounter,V=(0,an.parseDocument)(k,{lineCounter:O,keepSourceTokens:!0}),X=[];for(let n0 of V.errors){let e0=n0.pos?co(O,[n0.pos[0],n0.pos[1],n0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};X.push({file:R,level:"error",message:n0.message,...e0})}if(X.length>0)return X;let H=V.toJSON();if(!l(H)){let e0=(l.errors||[]).filter(f0=>f0.keyword!=="if"),x0=new Set;for(let f0 of e0){let U=YE(f0);if(x0.has(U))continue;x0.add(U);let F0=ZE(V,O,f0);X.push({file:R,level:"error",message:U,...F0})}}return X}v0.validateJsonSchema=E,v0.PreCompiler=(R,k,O)=>new Zt.PreCompiler(R,k,O);function b(R,k){return Ds(R,k)}v0.generateMyDatanetXML=b;async function j(R,k,O,V){let X=await Z.read(R,k),H=Ds(X,V),W=_x.Utils.joinPath(R,o0.filePaths.dist.ddeXmlPath);await k.writeFile(W,H),O.log("Generated",o0.filePaths.dist.ddeXmlPath)}v0.exportMyDatanetXML=j;async function g(R,k,O,V,X){let H=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let W=await Z.read(R,k);if(!Z.isApp(W)||!W.registry?.id)return;if(!X){O.warn("Could not fetch dde of previous version: No API token provided.");return}let n0=lr.coerce(W.version);try{let f0=(await ux.getExistingApplication(X,W.publisher,W.registry.id,V)).versions.find(p0=>!lr.prerelease(p0.version)&&lr.lte(p0.version,n0)),U=f0?.files.find(p0=>p0.name==="dde.json");if(!U){O.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let F0=await fetch(U.downloadUrl,{headers:{...yA(X),...ux.injectSemverHeader(!0)}});if(F0.status!==200){O.warn(`Could not fetch the dde.json of version "${f0?.version}"`);return}let E0=await F0.text();await k.writeFile(H,E0),O.log(`Saved history.json of previous app version ${f0.version}`)}catch(e0){O.error("Failed to fetch the dde of previous version",e0)}}v0.fetchPreviousHistoryJson=g;async function q(R,k,O){try{let V=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dde.historyJson);if(await k.stat(V)){let H=await k.readFile(V);return JSON.parse(A(H))}let X=_x.Utils.joinPath(R,pt,"history.json");if(await k.stat(X)){O.warn(`"${o0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${pt}history.json"`);let H=await k.readFile(X),W=JSON.parse(A(H)),n0=await Z.read(R,k),e0=lr.coerce(n0.version)?.version,x0=Object.keys(W||{}).sort(lr.rcompare).find(U=>U!==e0);if(!x0)return null;let f0=W[x0];return{version:x0,...f0}}}catch(V){O.error("Failed to read history.json",V)}return O.warn("history.json does not exist"),null}v0.getHistoryJson=q;function S(R,k){return{version:lr.coerce(k.version)?.version||"1.0.0",...structuredClone(R)}}v0.buildHistoryJson=S;async function P(R,k,O,V){let X=await Z.read(R,k),H=S(V,X),W=_x.Utils.joinPath(R,o0.filePaths.dist.historyJson);await k.writeFile(W,JSON.stringify(H,null," ")),O.log("Generated",o0.filePaths.dist.historyJson)}v0.exportHistoryJson=P;async function T(R,k){return k.rm(_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.path))}v0.clearAutoDloDir=T;async function M(R,k,O,V){await T(R,k);let X=await Z.read(R,k),H=await lo(R,k,X),W=await yx.read(R,k,O),n0=Ya(V,W,X),x0=new Dt(X,V,null).generate();for(let cx of H){let eA=new Dt(X,V,cx.libraryName),{globals:NA,helper:Ux}=eA.generate(),U0=[...NA,...Ux].join(`\r
|
|
2759
|
+
`),O0=o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",cx.libraryName),sx=_x.Utils.joinPath(R,O0);U0.length&&(O.log("Generated",O0),await k.writeFile(sx,U0))}let f0=xo(V),U=Za(V,H.map(cx=>cx.libraryName)),F0=fo(V),E0=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(E0,n0),O.log("Generated",o0.filePaths.studio.auto.dlo.autoInc);let p0=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(p0,U),O.log("Generated",o0.filePaths.studio.auto.dlo.autoUplinkInc);let b0=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(b0,F0),O.log("Generated",o0.filePaths.studio.auto.dlo.autoLocalDataInc);let N0=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(N0,[...x0.globals,...x0.helper].join(`
|
|
2760
|
+
`)),O.log("Generated",o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(L0,f0),O.log("Generated",o0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(R,k,O)}v0.exportAutoDloFiles=M;async function N(R,k,O,V){let X=await Z.read(R,k),H=Z.isLibrary(X),W=_x.Utils.joinPath(R,o0.filePaths.dist.path,"dde-api.yaml");await k.rm(W).catch(()=>{});let n0=_x.Utils.joinPath(R,o0.filePaths.dist.ddeApi);if(await k.writeFile(n0,gs(V,X)),O.log("Generated",o0.filePaths.dist.ddeApi),H){let e0=_x.Utils.joinPath(R,o0.filePaths.dist.ddeApiPath,`${X.name}.yaml`),x0=gs(V,X,X.name);x0.length&&(await k.writeFile(e0,x0),O.log("Generated",o0.filePaths.dist.ddeApiPath+`${X.name}.yaml`))}}v0.exportOpenApi=N;async function z(R,k,O){let V=_x.Utils.joinPath(R,o0.filePaths.studio.auto.dlo.defaultInc),X=await Ao(R,k);await k.writeFile(V,X),O.log("Generated",o0.filePaths.studio.auto.dlo.defaultInc)}v0.exportDefaultInc=z})(SA||={});async function lo(x,A,r){let e=[],t=await Bx.getAll(r);for(let a in t){let s=Bx.dependencyToPath(x,a),l=Bx.dependencyIdToName(a),E=_x.Utils.joinPath(s,`${pt}/${l}.dde`);await A.stat(E)&&e.push({libraryName:l,path:E,yaml:await SA.readYamlFile(E,A)})}if(Z.isLibrary(r)){let a=_x.Utils.joinPath(x,`/${pt}/${r.name}.dde`);await A.stat(a)&&e.push({libraryName:r.name,path:a,yaml:await SA.readYamlFile(a,A)})}return e}function WE(x,A,r){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let e=x[A];if(typeof e=="string")return e;if(typeof e!="object"||e===null)return"";let t=r?.missingProperty;return t?e[t]??"":""}function XE(x,A,r,e){let a={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${e?.patternErrorMessage??r}`,minimum:()=>`${r}.`,maximum:()=>`${r}.`,exclusiveMinimum:()=>`${r}.`,exclusiveMaximum:()=>`${r}.`,not:()=>`This value is not allowed here. ${e?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${e?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${e?.description??""}`.trimEnd()}[x];return a?a():r}function YE(x){let A=x.instancePath||"/",r=x.parentSchema,e=WE(r?.errorMessage,x.keyword,x.params);if(e)return`${A}: ${e}`;let t=x.message||"unknown validation error";return`${A}: ${XE(x.keyword,x.params,t,r)}`}function QE(x,A){let r=A.split("/").filter(Boolean).map(e=>{let t=Number(e);return Number.isNaN(t)?e:t});for(let e=r.length;e>=0;e--){let t=r.slice(0,e),a=x.getIn(t,!0);if(a?.range)return a.range}return null}function ZE(x,A,r){let e=QE(x,r.instancePath||"");return e?co(A,e):{line:0,startCharacter:0,endCharacter:0}}var ys=require("vscode-uri");var We=class{dloFileMap={};rootUri=ys.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let r=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();r=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,r))return this.dloFileMap[r];let e=T0.generateHashForFilePath(r);return this.dloFileMap[r]=e,e}getFilePathForSequence(A){let r=Object.entries(this.dloFileMap).find(([,e])=>e===A);return r?ys.URI.parse(`${this.rootUri.path}${r[0]}`).path:null}};var yo=require("vscode-uri");function _s(x){return x.replace(/\\/g,"/").split("/").pop()??""}function xe(x){return/\.spec\.dlo$/i.test(_s(x))}function bt(x,A){let r=_s(x);if(!r)return!1;if(xe(r))return!0;let e=A?.dlo?.mainFile;return e?_s(e)===r:r==="main.dlo"}var xB=/^\s*#define\s+TEST_OWN_MAIN\b/m;function AB(x){return xB.test(x)}function on(x,A){if(!xe(x))return[];let r=["DLO_TEST_SPEC=1"];return A!==void 0&&AB(A)&&r.push("TEST_OWN_MAIN=1"),r}var jt="__it_";var vn=31-jt.length-4;function Co(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function Fn(x,A=vn){let r=Co(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return Co(r.substring(0,Math.max(0,A)))}function fn(x,A){let r=Fn(x);if(!r||!A.has(r))return r;for(let e=2;;e++){let t=`_${e}`,a=`${Fn(x,vn-t.length)}${t}`;if(!A.has(a))return a}}function ln(x){return`${jt}${x}`}function mt(x,A){return`${jt}${x}__${A}`}function En(x,A){return`// @it ${x} "${A}"`}var Do=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var Bn=class{quote="";step(A,r){let e=A[r];return this.quote?e==="\\"&&r+1<A.length?{insideString:!0,nextIndex:r+2}:(this.quote=e===this.quote?"":this.quote,{insideString:!0,nextIndex:r+1}):e==='"'||e==="'"?(this.quote=e,{insideString:!0,nextIndex:r+1}):{insideString:!1,nextIndex:r+1}}};function uo(x,A){let r=new Bn,e=0;for(let t=A;t<x.length;){let{insideString:a,nextIndex:s}=r.step(x,t);if(!a){if(x[t]==="(")e++;else if(x[t]===")"&&--e===0)return t}t=s}return-1}function cn(x){let A=new Bn,r=[],e=0,t="";for(let a=0;a<x.length;){let{insideString:s,nextIndex:l}=A.step(x,a),E=x[a];!s&&E===","&&e===0?(r.push(t),t=""):(!s&&(E==="("||E==="{")?e++:!s&&(E===")"||E==="}")&&e--,t+=x.slice(a,l)),a=l}return r.push(t),r}var eB=/^[A-Za-z_@][A-Za-z0-9_@]*$/;function po(x){return eB.test(x.trim())}function bo(x){return/^\{[\s\S]*\}$/.test(x.trim())}var tB=/^(?:0[xX][0-9a-fA-F]+|\d+|xx)$/;function jo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty byte list {} is not valid"};let r=[];for(let e of cn(A)){let t=e.trim();if(!tB.test(t))return{error:`"${t}" is not a byte literal (decimal, 0x hex, or xx)`};if(t==="xx"){r.push("xx");continue}let a=t.startsWith("0x")||t.startsWith("0X")?parseInt(t,16):parseInt(t,10);if(a>255)return{error:`${t} is out of range 0..255 for a byte list`};r.push(a.toString(16).toUpperCase().padStart(2,"0"))}return{packed:r.join("")}}function mo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty list {} is not valid"};let r=[];for(let e of cn(A)){let t=e.trim();if(!/^-?(?:0[xX][0-9a-fA-F]+|\d+)$/.test(t))return{error:`"${t}" is not an integer literal`};let a=t.startsWith("-"),s=a?t.substring(1):t,l=(s.startsWith("0x")||s.startsWith("0X")?parseInt(s,16):parseInt(s,10))*(a?-1:1);r.push(l.toString(10))}return{packed:r.join("|")}}var nB=/^(?:\s*#options\s+)(.*)(?:\s*)$/,sB=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,iB=/^(?:\s*#ifdef\s+)(.*)$/,aB=/^(?:\s*#ifndef\s+)(.*)$/,oB=/^(?:\s*#elseifdef\s+)(.*)$/,FB=/^(?:\s*#elseifndef\s+)(.*)$/,_o=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,wo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,So=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,qo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,To=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,vB=/^\s*#include\s*</,fB=/^\s*#endinput\s*/,lB=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,$o=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Po=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function ho(x,A=""){let r=" ",e=x;return A.length?r={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(r=x.substring(1,1),e=`"${x.substring(2,x.length-1)}"`),{priority:`'${r}'`,code:e}}var No=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Io=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Io||{}),EB=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,BB=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,cB=/^(.*)(^|\s*)onUplinkEvent/,CB=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,dB=/^\s*#callback\s+\w+\s*\(/;function go(x){let A=0,r=!1,e="";for(let t=0;t<x.length;t++){let a=x[t];if(r){if(a==="\\"){t++;continue}a===e&&(r=!1);continue}if(a==='"'||a==="'"){r=!0,e=a;continue}a==="("?A++:a===")"&&A--}return A}function Mo(x){return _o.test(x)||qo.test(x)||wo.test(x)||So.test(x)||To.test(x)||$o.test(x)||Po.test(x)||No.test(x)}function DB(x,A,r){if(!(CB.test(r)||dB.test(r)))return null;let t=go(r);if(t<=0)return null;let a=t,s=[x[A]],l=[r],E=A+1,D=100;for(;a>0&&E<x.length&&E-A<D;){let g=x[E],q=g.split("//",1)[0];s.push(g),l.push(q),a+=go(q),E++}if(s.length<=1||a>0)return null;let b=s.map((g,q)=>q===0?g:g.trim()).join(" "),j=l.map((g,q)=>q===0?g:g.trim()).join(" ");return Mo(j)?{joinedOriginal:b,joinedStripped:j,extraLineCount:s.length-1}:null}var Lo=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,Ro=String.raw`"((?:[^"\\]|\\.)*)"`,uB=new RegExp(String.raw`^(\s*)IT\s*\(\s*${Ro}\s*\)(.*)$`),pB=new RegExp(String.raw`^\s*IT\s*\(\s*${Lo}\s*,\s*${Ro}\s*\)`),bB=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,jB=new RegExp(String.raw`^\s*STEP\s*\(\s*${Lo}\s*,(\s*)\d+\s*\)`),mB=/^(\s*)AFTER_LOOP\b(.*)$/,hB=/\b(?:RUN_LOOP|MOCK_DELIVER|MOCK_DELIVER_SEC|MOCK_DELIVER_IMMEDIATES)\s*\(/,gB=/^\s*DESCRIBE\s*\(/,kB=/^(\s*)TEST_SETUP\s*\(\s*\)(.*)$/,yB=/^(\s*)TEST_TEARDOWN\s*\(\s*\)(.*)$/,_B={MOCK_RETURN:{nativeNameArgs:[1]},MOCK_RETURN_SEQ:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_RETURN_SEQ_STRICT:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_BYTES:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_BYTES_RET:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_SEQ:{nativeNameArgs:[1]},MOCK_SEQ_STRICT:{nativeNameArgs:[1]},MOCK_REG:{nativeNameArgs:[1],listArgs:{4:"bytes"}},MOCK_REG_MASKED:{nativeNameArgs:[1],listArgs:{5:"bytes"}},MOCK_REG_RW:{nativeNameArgs:[1]},MOCK_RESET:{nativeNameArgs:[1]},EXPECT_CALLED:{nativeNameArgs:[1]},EXPECT_ARG_INT:{nativeNameArgs:[1]},EXPECT_ARG_BYTES:{nativeNameArgs:[1],listArgs:{4:"bytes"}},EXPECT_REG:{nativeNameArgs:[1]},EXPECT_REG_WRITES:{nativeNameArgs:[1]},EXPECT_CALL_ORDER:{nativeNameArgs:[1,3]},EXPECT_RECORD_BYTES:{listArgs:{2:"bytes"}}},ws=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;sawLoopAdvance=!1;describeCount=0;sawFileWideSetup=!1;sawFileWideTeardown=!1;setupSeenForGroup=new Set;teardownSeenForGroup=new Set;rewrite(A){let r=wB(A),e=A.substring(r.length);return hB.test(r)&&(this.sawLoopAdvance=!0),gB.test(r)&&this.describeCount++,this.rewriteIt(r,e)??this.rewriteAfterLoop(r,e)??this.rewriteStep(r,e)??this.rewriteTestSetup(r,e)??this.rewriteTestTeardown(r,e)??this.rewriteMacroArgs(r,e)}finishDeclaration(A,r,e,t,a,s){let{text:l,diagnostics:E}=this.applyMacroArgRewrite(e),D=t?`${ko(A,r,l)} ${t}`:ko(A,r,l);return{line:a?`${D} ${a}`:D,diagnostics:[...s,...E]}}rewriteIt(A,r){let e=uB.exec(A);if(!e)return this.checkItTwoArg(A);let[,t,a,s]=e,l=fn(a,this.slugs);return l?(this.slugs.add(l),this.currentSlug=l,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,this.finishDeclaration(t,ln(l),s,En(l,a),r,[])):{line:null,diagnostics:[{level:"error",message:`IT("${a}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let r=pB.exec(A);return!r||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,!r[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${r[1]}") without an id, or drop the comma.`}]}}rewriteStep(A,r){let e=bB.exec(A);if(!e)return this.checkStepTwoArg(A);let[,t,a,s]=e,l=Number(a),E=this.stepError(l);return E?{line:null,diagnostics:[{level:"error",message:E}]}:(this.stepsOfCurrent.add(l),this.sawLoopAdvance=!1,this.finishDeclaration(t,mt(this.currentSlug,l),s,null,r,[]))}rewriteAfterLoop(A,r){let e=mB.exec(A);if(!e)return null;let[,t,a]=e;if(this.currentIsMacroForm)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP continues an IT("title"); an IT(id, "title") is continued by STEP(id,n).'}]};if(!this.currentSlug)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP has no IT() before it - it continues the most recent IT("title") after the firmware main loop ran.'}]};let s=this.sawLoopAdvance,l=this.stepsOfCurrent.size?Math.max(...this.stepsOfCurrent)+1:2;this.stepsOfCurrent.add(l),this.sawLoopAdvance=!1;let E=[];return s||E.push({level:"warning",message:"AFTER_LOOP splits the test but the block before it never let the main loop run - add RUN_LOOP(ms) at its end, or merge the blocks"}),this.finishDeclaration(t,mt(this.currentSlug,l),a,null,r,E)}rewriteTestSetup(A,r){let e=kB.exec(A);if(!e)return null;let[,t,a]=e;if(this.describeCount===0)return this.sawFileWideSetup?{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this spec."}]}:(this.sawFileWideSetup=!0,null);let s=this.describeCount;if(this.setupSeenForGroup.has(s))return{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this DESCRIBE group."}]};this.setupSeenForGroup.add(s);let l=`__tsetup_${s}`;return this.finishDeclaration(t,l,a,`// @setup ${s}`,r,[])}rewriteTestTeardown(A,r){let e=yB.exec(A);if(!e)return null;let[,t,a]=e;if(this.describeCount===0)return this.sawFileWideTeardown?{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this spec."}]}:(this.sawFileWideTeardown=!0,null);let s=this.describeCount;if(this.teardownSeenForGroup.has(s))return{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this DESCRIBE group."}]};this.teardownSeenForGroup.add(s);let l=`__tteardown_${s}`;return this.finishDeclaration(t,l,a,`// @teardown ${s}`,r,[])}rewriteMacroArgs(A,r){let{text:e,diagnostics:t,changed:a}=this.applyMacroArgRewrite(A);return a?{line:e+r,diagnostics:t}:t.length?{line:null,diagnostics:t}:null}applyMacroArgRewrite(A){let r=A,e=!1,t=[];for(let[a,s]of Object.entries(_B))r=this.rewriteMacroCallsOf(r,a,s,t,()=>e=!0);return{text:r,diagnostics:t,changed:e}}rewriteMacroCallsOf(A,r,e,t,a){let s=new RegExp(String.raw`\b${r}\b\s*\(`,"g"),l="",E=0,D=null;for(;D=s.exec(A);){let b=D.index+D[0].length-1,j=uo(A,b);if(j<0)continue;let g=qB(A.slice(b+1,j),r,e,t);g&&(l+=A.slice(E,b+1)+g+")",E=j+1,a()),s.lastIndex=j+1}return l+=A.slice(E),l}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let r=jB.exec(A);return!r||!r[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function wB(x){let A="";for(let r=0;r<x.length;r++){let e=x[r];if(A)e==="\\"?r++:e===A&&(A="");else if(e==='"'||e==="'")A=e;else if(e==="/"&&x[r+1]==="/")return x.substring(0,r)}return x}function SB(x,A,r,e,t){let a=x.match(/^\s*/)?.[0]??"",s=x.trim();if(e.nativeNameArgs?.includes(A)&&po(s))return{text:`${a}"${s}"`,changed:!0};let l=e.listArgs?.[A];if(l&&bo(s)){let E=l==="bytes"?jo(s):mo(s);return E.error?(t.push({level:"error",message:`${r}(): argument ${A} - ${E.error}`}),{text:x,changed:!1}):{text:`${a}"${E.packed}"`,changed:!0}}return{text:x,changed:!1}}function qB(x,A,r,e){let t=x.length?cn(x):[],a=!1,s=t.map((l,E)=>{let D=SB(l,E+1,A,r,e);return a=a||D.changed,D.text});return a?s.join(","):null}function ko(x,A,r){let e=r.trim(),t=e?" "+e:"";return`${x}public ${A}()${t}`}var Xe=class{pragmaDynamic=null;dloFileSequencer=new We;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,r,e,t,a){this.dloFileSequencer.workspacePath=A;let s=[],l=t.path,E=!1,D=yo.Utils.basename(t);if(l.includes(o0.filePaths.studio.auto.dlo.path)){let P=D.substring(0,D.length-8);!["app","main"].includes(P)&&D.endsWith("-dde.inc")&&(E=T0.generateHashForLibraryName(P))}else if(l.includes(o0.filePaths.studio.libdeps)){let P=l.split("libdeps/")[1],[T]=P.split("/");["dlo-core"].includes(T)||(E=T0.generateHashForLibraryName(T))}else Z.isLibrary(e)&&(D.endsWith(".dlo")||l.includes("/dlo/examples/")||l.includes("/dlo/test/")?r.log("Skipping dde mangling for project file",D):E=T0.generateHashForLibraryName(e.name));if(l.endsWith(".auto/default.inc"))return{data:a.join(`
|
|
2761
|
+
`),diagnostics:s};let b=[],j=xe(l)?new ws:null,g=this.dloFileSequencer.getSequenceForFile(l);b.push(`stock static __file{} = "${g}";`),b.push(`stock static __refid{} = "${g}";`),b.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),b.push("#line 0");let S=0;for(let P=0;P<a.length;P++){let T=a[P],M=T.split("//",1)[0],N=null,z=0;if(!Mo(M)){let R=DB(a,P,M);R&&(T=R.joinedOriginal,M=R.joinedStripped,z=R.extraLineCount)}let v0=j?.rewrite(T)??null;for(let R of v0?.diagnostics??[])s.push({file:t,level:R.level,line:P,message:R.message});if(v0?.line!==null&&v0?.line!==void 0)T=v0.line;else if(N=nB.exec(M))T="// "+T,s.push({file:t,level:"error",line:P,message:"#options is not supported here. Use the DLO settings instead."});else if(N=sB.exec(M))T="// "+T,s.push({file:t,level:"error",line:P,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=lB.exec(M)){let R=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(R)||R<64?s.push({file:t,level:"error",line:P,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||R>this.pragmaDynamic)&&(this.pragmaDynamic=R)}else if(N=iB.exec(M))T=T.replace("#ifdef ","#if defined ");else if(N=aB.exec(M))T=T.replace("#ifndef ","#if !defined ");else if(N=oB.exec(M))T=T.replace("#elseifdef ","#elseif defined ");else if(N=FB.exec(M))T=T.replace("#elseifndef ","#elseif !defined ");else if(N=_o.exec(M)){let[,R,k,O,V]=N;T=`${R}#define ${k} _catch_funcidx( "___${k}")
|
|
2762
2762
|
forward ___${k}( ${O});
|
|
2763
2763
|
#line
|
|
2764
2764
|
${S}
|
|
2765
|
-
public ___${k}( ${O})${
|
|
2766
|
-
`),diagnostics:s}}};var
|
|
2767
|
-
|
|
2765
|
+
public ___${k}( ${O})${V}`}else if(N=qo.exec(M)){let[,R,k]=N;T=`${R}${k}{_log_string="";_assert(__refid,__line);}`}else if(N=wo.exec(M)){let[,R,k,O,V]=N;T=`${R}${k}{ if (!(${O})) { sprintf(_log_string,_,${V.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=So.exec(M)){let[,R,k,O]=N;T=`${R}${k}{ if (!(${O})) { _log_string="";_assert(__refid,__line); }}`}else if(N=To.exec(M)){let[,R,k,O]=N;T=`${R}${k}_catch(__refid,__line,${O});`}else if(N=$o.exec(M)){let[,R,k,O,V,X]=N,{priority:H,code:W}=ho(V,O.substring(1));H!==null&&(T=`${R}${k}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${X});DDE_applog_write(${H}, ${W}, params_str, __applog_src_id);}`)}else if(N=Po.exec(M)){let[,R,k,O,V]=N,{priority:X,code:H}=ho(V,O.substring(1));X!==null&&(T=`${R}${k}DDE_applog_write(${X}, ${H}, "", __applog_src_id);`)}else if(N=No.exec(M)){let[,R,k,O,V]=N,X=O.substring(1),H=Io[X];T=`${R}${k}{ if(_log_level <= ${H}){ sprintf(_log_string,_,${V.replace(/%%/g,"\xFF")}); _log${O}(__refid,__line); }}`}else(N=vB.exec(M))&&!l.includes(o0.filePaths.studio.auto.path)&&!bt(l,e)?(l.includes(o0.filePaths.studio.libdeps)||s.push({file:t,level:"warning",line:P,message:"Libraries are included automatically - remove this #include line"}),T="// Libraries are included automatically! - "+M):(N=fB.exec(M))&&(s.push({file:t,level:"error",line:P,message:"#endinput is not supported - use #if/#endif instead"}),T=M);E&&!e.legacyProject&&(EB.exec(M)&&(T=T.replaceAll("DDE_",`_${E}`)),BB.exec(M)&&(T=T.replace("onUplink",`_${E}`)),cB.exec(M)&&(T=T.replace("onUplink",`_${E}Uplink`))),b.push(T),S++;for(let R=0;R<z;R++)b.push(""),S++,P++}if(!bt(l,e)){let P=D.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),T=`_inc_${P}`.substring(0,31),M=`_inc_${P}_inc`.substring(0,31);b.push(`#if defined ${T}`),b.push(`#undef ${T}`),b.push("#endif"),b.push(`#if defined ${M}`),b.push(`#undef ${M}`),b.push("#endif")}return{data:b.join(`
|
|
2766
|
+
`),diagnostics:s}}};var Oo=require("vscode-uri");function TB(x){let A=x.dlo?.mainFile;if(!A)return{dir:"dlo",mainFileBaseName:null};let r=A.replace(/\\/g,"/").split("/"),e=r.pop()??null;return{dir:r.join("/")||".",mainFileBaseName:e}}var $B=/^[A-Za-z0-9_.-]+$/;function PB(x){if(!$B.test(x)||x.startsWith("."))throw new Error(`"${x}" is not a valid spec name: only letters, digits, "_", "-" and "." are allowed, and it must not start with a dot.`)}function NB(x,A){return`${A?`#include "${A}"`:"// no dlo.mainFile in studio.json - #include the module this spec exercises"}
|
|
2767
|
+
|
|
2768
|
+
DESCRIBE("${x}")
|
|
2769
|
+
|
|
2770
|
+
TEST_SETUP()
|
|
2771
|
+
{
|
|
2772
|
+
// mocks that every test of this file needs, e.g. MOCK_RETURN(rM2M_GetTime, 1000);
|
|
2773
|
+
}
|
|
2774
|
+
|
|
2775
|
+
IT("does the first thing")
|
|
2776
|
+
{
|
|
2777
|
+
EXPECT_TRUE(true);
|
|
2778
|
+
}
|
|
2779
|
+
`}async function Go(x,A,r,e){PB(e);let{dir:t,mainFileBaseName:a}=TB(r),s=t==="."?`${e}.spec.dlo`:`${t}/${e}.spec.dlo`,l=Oo.Utils.joinPath(x,s);if(await A.stat(l))throw new Error(`${s} already exists - refusing to overwrite it.`);return await A.writeFile(l,NB(e,a)),s}var Er=require("vscode-uri");var G0=nx(require("fs")),px=require("vscode-uri");var Jo=nx(require("iconv-lite")),IB=T0.convertBlobToStringArray,zo=16384,Vo=511,Ss=zo|Vo,MB=32768,LB=438,Uo=MB|LB,RB=new Xe,Ye={};function dn(){let x=[];for(let A of Object.keys(Ye))x.push(...Ye[A].diagnostics);return x}var Cn=!!process.env.DLO_PROFILE,yr={precompileCount:0,cacheHits:0,precompileMs:0};function Wo(x){Cn&&(x.log(`[DLO_PROFILE] precompile: ${yr.precompileCount} runs, ${yr.cacheHits} cache hits, ${yr.precompileMs.toFixed(1)}ms`),yr.precompileCount=0,yr.cacheHits=0,yr.precompileMs=0)}var qs=(x,A,r,e)=>{let t={getattr(s){let l=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s)),E=l.fsPath;if(!G0.existsSync(E))throw new x.ErrnoError(44);let D=Ko(A,e,r,l),b=G0.statSync(E),j=D?.length||b.size;return{mode:b.isDirectory()?Ss:Uo,size:j,atime:b.atime,mtime:b.mtime,ctime:b.ctime}},setattr(s,l){let E=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s)).fsPath;if(!G0.existsSync(E))throw new x.ErrnoError(44);if(typeof l.size=="number"&&G0.truncateSync(E,l.size),typeof l.mode=="number"&&G0.chmodSync(E,l.mode),l.atime||l.mtime){let D=G0.statSync(E);G0.utimesSync(E,l.atime??D.atime,l.mtime??D.mtime)}},lookup(s,l){let D=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s),l).fsPath;if(!G0.existsSync(D))throw new x.ErrnoError(44);let b=G0.statSync(D),j=x.createNode(s,l,b.isDirectory()?Ss:Uo,0);return j.node_ops=s.node_ops,j.stream_ops=s.stream_ops,j},readdir(s){let l=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s)).fsPath;return[".","..",...G0.readdirSync(l)]},mknod(s,l,E,D){let b=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s),l).fsPath;G0.writeFileSync(b,"");let j=x.createNode(s,l,E,D);return j.node_ops=s.node_ops,j.stream_ops=s.stream_ops,j},unlink(s,l){let E=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s),l).fsPath;G0.unlinkSync(E)},mkdir(s,l,E){let D=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s),l).fsPath;G0.mkdirSync(D,{mode:E});let b=x.createNode(s,l,E|Ss,0);return b.node_ops=s.node_ops,b.stream_ops=s.stream_ops,b},rmdir(s,l){let E=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s),l).fsPath;G0.rmdirSync(E)},rename(s,l,E){let D=px.Utils.joinPath(px.URI.parse(s.mount.opts.root),x.getPath(s)).fsPath,b=px.Utils.joinPath(px.URI.parse(l.mount.opts.root),x.getPath(l),E).fsPath;G0.renameSync(D,b)}},a={open(s){let l=px.Utils.joinPath(px.URI.parse(s.node.mount.opts.root),x.getPath(s.node));s.modifiedContent=Ko(A,e,r,l),s.modifiedContent||(s.nfd=G0.openSync(l.fsPath,Ho(s.flags)))},close(s){s.nfd&&G0.closeSync(s.nfd)},read(s,l,E,D,b){if(!s.modifiedContent)return G0.readSync(s.nfd,l,E,D,b);let j=s.modifiedContent;if(b>=j.length)return 0;let g=j.length-b,q=Math.min(D,g);return OB(j,l,E,b,b+q),q},write(s,l,E,D,b){return G0.writeSync(s.nfd,l,E,D,b)},flagsToMode:Ho,llseek(s,l,E){let D=l;if(E===1)D+=s.position;else if(E===2){let b=G0.fstatSync(s.nfd);D+=b.size}if(D<0)throw new x.ErrnoError(28);return s.position=D,D}};return{mount(){let s=_r(A),l=x.createNode(null,s,zo|Vo,0);return l.node_ops=t,l.stream_ops=a,l},node_ops:t,stream_ops:a}};function Ho(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function OB(x,A,r,e,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,r,e,t);else{let a=x.subarray(e,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,a,r):A.set(a,r)}}function Ko(x,A,r,e){let t=e.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let a=GB(t);if(!a){delete Ye[t];return}let s=Ye[t];if(s&&s.mtimeMs===a.mtimeMs&&s.size===a.size)return Cn&&yr.cacheHits++,s.buffer;let l=Cn?performance.now():0,E=UB(x,A,r,e);return Cn&&(yr.precompileCount++,yr.precompileMs+=performance.now()-l),Ye[t]={buffer:E.buffer,mtimeMs:a.mtimeMs,size:a.size,diagnostics:E.diagnostics},Ye[t].buffer}function GB(x){try{return G0.statSync(x)}catch{return null}}function UB(x,A,r,e){let t=G0.readFileSync(e.fsPath),a=IB(t),s=RB.preCompileDloFile(x,A,r,e,a);return{buffer:Jo.encode(s.data,"cp1252"),diagnostics:s.diagnostics}}function _r(x){return x.fsPath.replace(/\\/g,"/")}function ht(x,A){let r=_r(x);return _r(A).replace(r,"")}var AF=xF(),kt=AF.createPawnCC,rF=AF.createPawnDbg;var Qe=class{constructor(A,r,e){this.cwd=A;this.fs=r;this.logger=e;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await kt({noExitRuntime:A,print:s=>{let l=Ps(this.cwd,s);this.logger.log(l?l.message:s),this.stdout.push(s)},printErr:s=>{let l=Ps(this.cwd,s);s.includes(": warning")?this.logger.warn(l?l.message:s):this.logger.error(l?l.message:s),this.stderr.push(s),this.stdout.push(s)}});let r=_r(this.cwd),[e]=r.split("/"),t=this.dloCC.FS,a=await Z.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=qs(t,this.cwd,a,this.logger),t.mkdir(e),t.mount(t.filesystems.NODEFS_TS,{root:"/"},e),t.chdir(_r(this.cwd))}async compile(A,r){let e=await Z.read(A,r);if(!await Z.isApmPartEnabled(A,r,S0.Part.dlo,e))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await r.mkdir(Er.Utils.joinPath(A,"dist/dlo"));let t=Er.Utils.joinPath(A,e.dlo?.mainFile||o0.filePaths.dlo.mainDLO),a=[],s=Er.Utils.joinPath(A,o0.filePaths.studio.auto.dlo.cfg),l=ht(A,s);if(a.push(`-T.${l}`),xe(t.path)){let D="";try{D=T0.convertBlobToString(await r.readFile(t))}catch(b){this.logger.error(b)}a.push(...on(t.path,D))}let E=0;try{let D=`.${ht(A,t)}`;E=await this.dloCC.callMain([D,...a])}catch(D){this.logger.error(D)}return{code:E,stdout:this.stdout,stderr:this.stderr,diagnostics:[...dn(),...Ns(A,this.stderr,t)]}}async getDloSymbols(A,r){let e=r.map(j=>{let g=j.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(g)?`${g}.${j.substring(2)}`:j}),t=!!process.env.DLO_PROFILE,a=t?performance.now():0,{compiler:s,print:l}=await this.getSymbolCompiler(),E=t?performance.now()-a:0,D=t?performance.now():0,b=0;try{b=await s.callMain(["."+A,...e,"-R"])||0}catch(j){if(j.stack?.startsWith("RuntimeError"))return null;throw j}finally{if(t){let j=performance.now()-D;this.logger.log(`[DLO_PROFILE] instantiate: ${E.toFixed(1)}ms, callMain: ${j.toFixed(1)}ms`),Wo(this.logger)}}return{exitCode:b,lines:[...l.stdout,...l.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},r=await kt({noExitRuntime:!1,print:l=>{A.stdout.push(l)},printErr:l=>{A.stderr.push(l)}}),e=_r(this.cwd),[t]=e.split("/"),a=r.FS,s=await Z.read(this.cwd,this.fs);return a.filesystems.NODEFS_TS=qs(a,this.cwd,s,this.logger),a.mkdir(t),a.mount(a.filesystems.NODEFS_TS,{root:"/"},t),{compiler:r,print:A}}};function Ns(x,A,r){let e=[],t=A.filter(a=>!!a.trim());for(let a of t){if((a.includes("Assertion failed:")||a.includes("Compilation aborted."))&&r){e.push({file:r,level:"error",line:0,message:a});continue}let s=Ps(x,a);s&&e.push({file:Er.URI.parse(`file:///${s?.posixPath}`),level:s.level,line:Number(s.lineNumber)-1,message:s.msg})}return e}function Ps(x,A){let r=A.indexOf(" : "),e=A.indexOf(": ",r+3),t=A.substring(0,r).trim(),a=A.substring(r+3,e).trim(),s=A.substring(e+2).trim();if(!t||!a||!s)return null;let[l,E]=t.split(/[()(-)]/),D=a.split(" "),b=D[D.length-2],g=Er.Utils.joinPath(x,l).fsPath.replace(/\\/g,"/");g.startsWith("/")&&(g=g.substring(1));let q=A.replace(l,g);return{level:b,msg:s,posixPath:g,lineNumber:E,message:q}}async function eF(x,A,r){let e=["-M","-v2"],t=Er.Utils.joinPath(x,o0.filePaths.studio.auto.dlo.defaultInc);e.push(`-p.${ht(x,t)}`);let a=await Bx.getApmPartDependencies(x,A,S0.Part.dlo);for(let l of a){let E=Er.Utils.dirname(l.path);e.push(`-i.${ht(x,E)}`)}let s=r.dlo;return s&&e.push(...s.compileOptions),e.push("-o./dist/dlo/main.amx"),{path:Er.Utils.joinPath(x,o0.filePaths.studio.auto.dlo.cfg),data:e.join(`
|
|
2780
|
+
`)}}var yt;(k=>{k.createPawnCC=kt,k.createPawnDbg=rF,k.FileSequencer=We,k.PreCompiler=Xe;function t(O,V){return bt(O,V)}k.isDloRootFile=t;function a(O){return xe(O)}k.isDloSpecFile=a;function s(O,V){return on(O,V)}k.getSpecCompileDefines=s,k.itSlug=Fn,k.uniqueItSlug=fn,k.itPublicName=ln,k.stepPublicName=mt,k.IT_PREFIX=jt,k.IT_SLUG_MAX=vn,k.PUBLIC_NAME_MAX=31,k.itMarkerComment=En,k.IT_MARKER_RE=Do,k.scaffoldSpec=Go,k.Compiler=Qe,k.uriToMemFs=_r,k.getPrecompilerDiagnostics=dn,k.parseCompilerWarningsAndErrors=Ns;async function R(O,V,X){let H=await Z.read(O,V),W=await eF(O,V,H);await V.writeFile(W.path,W.data),X.log("Generated",o0.filePaths.studio.auto.dlo.cfg)}k.exportDloConfig=R})(yt||={});var Ls=require("vscode-uri");var Is=nx(require("node:child_process")),Ms=require("node:fs"),he=nx(require("node:path")),wr;(P=>{let x=he.join("node_modules","npm","bin","npm-cli.js"),A=(...T)=>{let M=he.join(...T);return(0,Ms.existsSync)(M)?M:void 0};function r(){if(process.platform!=="win32")return{file:"npm",args:[]};let T=process.env.npm_execpath;if(T&&/npm-cli\.js$/i.test(T)&&(0,Ms.existsSync)(T))return{file:process.env.npm_node_execpath||process.execPath,args:[T]};let M=A(he.dirname(process.execPath),x);if(M)return{file:process.execPath,args:[M]};for(let N of(process.env.PATH??"").split(he.delimiter).filter(Boolean)){let z=A(N,"npm.exe");if(z)return{file:z,args:[]};if(A(N,"npm.cmd")){let v0=A(N,x);if(v0)return{file:A(N,"node.exe")??process.execPath,args:[v0]}}}throw new Error("npm not found: make sure Node.js (including npm) is installed and on the PATH")}P.resolveNpm=r;function e(T,M={}){let N=r();return Is.spawn(N.file,[...N.args,...T],{...M,shell:!1,windowsHide:!0})}P.spawnNpm=e;let t=/[&|;<>`$()]/,a=/%[^%\s]+%/,s=(T,M)=>new Error(`Command "${T}" uses shell syntax ("${M}"), which is not supported. Move the logic into an npm script (package.json) and call that script instead.`),l=T=>{T.current!==void 0&&(T.tokens.push(T.current),T.current=void 0)},E=(T,M)=>{M===T.quote?T.quote=void 0:T.current=(T.current??"")+M},D=(T,M,N)=>{if(M==='"'||M==="'")T.quote=M,T.current=T.current??"";else if(/\s/.test(M))l(T);else{if(t.test(M))throw s(N,M);T.current=(T.current??"")+M}},b=T=>{let M={tokens:[],current:void 0,quote:void 0};for(let z of T)M.quote!==void 0?E(M,z):D(M,z,T);if(M.quote!==void 0)throw new Error(`Command "${T}" has an unterminated ${M.quote} quote`);l(M);let N=M.tokens.find(z=>a.test(z));if(N!==void 0)throw s(T,a.exec(N)[0]);return M.tokens};function j(T){let[M,...N]=b(T);if(M===void 0)throw new Error("Command is empty");if(M==="npm"){let z=r();return{file:z.file,args:[...z.args,...N]}}return{file:M,args:N}}P.parseCommandLine=j;let g=/[\0\r\n]/,q=({file:T,args:M})=>{if(typeof T!="string"||T.trim().length===0)throw new Error("Cannot run a command without a program name");let N=[T,...M].map(z=>{if(typeof z!="string"||g.test(z))throw new Error(`Invalid command line argument: ${JSON.stringify(z)}`);return z});return{file:N[0],args:N.slice(1)}};function S(T,M,N){return new Promise((z,v0)=>{let{file:R,args:k}=q(M),O={cwd:T.fsPath,env:process.env,shell:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]},V=Is.spawn(R,k,O),X="",H="",W=(n0,e0)=>{let x0=new Error(n0);x0.code=e0,x0.stdout=X,x0.stderr=H,v0(x0)};V.stdout?.on("data",n0=>{let e0=n0.toString("utf8");X+=e0,N.log(e0.replace(/\r?\n$/,""))}),V.stderr?.on("data",n0=>{let e0=n0.toString("utf8");H+=e0,N.error(e0.replace(/\r?\n$/,""))}),V.on("error",n0=>{W(`Failed to start "${R}": ${n0.message}`,n0.code??"ENOENT")}),V.on("close",(n0,e0)=>{if(n0===0){z();return}let x0=[R,...k].join(" "),f0=e0?`signal ${e0}`:`exit code ${n0}`;W(`Command failed: ${x0} (${f0})
|
|
2768
2781
|
${X}
|
|
2769
|
-
${H}`,n0??e0??void 0)})})}P.run=S})(wr||={});var
|
|
2782
|
+
${H}`,n0??e0??void 0)})})}P.run=S})(wr||={});var Dn;(r=>{async function x(e,t,a){let s=await Z.read(e,t);if(await Z.isApmPartEnabled(e,t,S0.Part.pov)){a.info("Executing POV build script",s.pov?.details.buildCommand);let{buildCommand:l,workingPath:E}=s.pov.details,D=Ls.Utils.joinPath(e,E);try{await tF(D,l,a)}catch(b){throw b.code?new Error(`APM part '${S0.Part.pov}' has errors. Aborted.`):b}}}r.tryBuildPov=x;async function A(e,t,a){let s=await Z.read(e,t);if(await Z.isApmPartEnabled(e,t,S0.Part.blo,s)){a.info("Executing BLO build script",s.blo?.buildCommand);let{buildCommand:l,workingPath:E}=s.blo,D=Ls.Utils.joinPath(e,E);try{await tF(D,l,a)}catch(b){throw b.code?new Error(`APM part '${S0.Part.blo}' has errors. Aborted.`):b}}}r.tryBuildBlo=A})(Dn||={});async function tF(x,A,r){let e=wr.parseCommandLine(A);await wr.run(x,e,r)}var sF=require("vscode-uri");var Os=require("minimatch");var iF=require("@gera2ld/tarjs"),ac=T0.convertBlobToString,oc=require("pako"),aF=".studioignore",oF=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];oF.push("**/.studio/**","**/node_modules/**",aF,"dist/defines.app.ts");var nF={dot:!0},ge;(e=>{async function x(t,a){let s=new iF.TarWriter;(await A(t,a)).forEach(D=>{s.addFile(D.name,D.data)});let E=await s.write();return oc.gzip(await E.arrayBuffer())}e.createArchive=x;async function A(t,a){let s=[],{ignore:l,negate:E}=await Fc(t,a),b=(await a.findFiles(t,"**/*")).filter(({path:j})=>{let g=j.slice(t.path.length+1);return!l.some(q=>(0,Os.minimatch)(g,q,nF))||E.some(q=>(0,Os.minimatch)(g,q.slice(1),nF))});for(let j of b){let g=j.path.slice(t.path.length+1),[q,S]=await Promise.all([a.stat(j),a.readFile(j)]);q&&s.push({name:g,data:S,modifyTime:new Date(q.mtime)})}return s}e.getFilesForArchive=A;async function r(t,a,s,l=yx.ENV.production){let{publisher:E,name:D,version:b}=a,j=await Nx.readFilesFromTarGz(s,["CHANGELOG.md","README.md","studio.json"]),g={"CHANGELOG.md":await Rs(j["CHANGELOG.md"]),"README.md":await Rs(j["README.md"]),"studio.json":await Rs(j["studio.json"]),"library.tar.gz":s};return await ux.publishLibraryVersion(t,E,D,b,g,l)}e.publishPackage=r})(ge||={});async function Fc(x,A){let r=["!studio.json","!README.md"],t=(await vc(x,A)).split(/[\n\r]/).map(D=>D.trim()).filter(D=>!!D).filter(D=>!/^\s*#/.test(D)),a=[...t,...t.filter(D=>!/(^|\/)[^/]*\*[^/]*$/.test(D)).map(D=>/\/$/.test(D)?`${D}**`:`${D}/**`)],s=[...oF,...a,...r],[l,E]=s.reduce((D,b)=>/^\s*!/.test(b)?[D[0],[...D[1],b]]:[[...D[0],b],D[1]],[[],[]]);return{ignore:l,negate:E}}async function vc(x,A){let r=sF.Utils.joinPath(x,aF);if(await A.stat(r)){let t=await A.readFile(r);return ac(t)}else return""}async function Rs(x){return new Uint8Array(await x.arrayBuffer())}var Br=require("vscode-uri");var Ae=require("yaml");var fc=T0.convertBlobToString,un=T0.yamlRangeToLineInformation,_t;(s=>{let x;(b=>(b.static="static",b.dynamic="dynamic",b.appDynamic="app-dynamic"))(x=s.Type||={});let A;(j=>(j.crcStamp="crc_stamp",j.stampOnly="stamp_only",j.onlyDown="only_down",j.onlyUp="only_up"))(A=s.SyncLogic||={});let r;(b=>(b.down="down",b.up="up",b.off="off"))(r=s.Force||={});async function e(l,E,D){let{properties:b,diagnostics:j,libraryFiles:g}=await t(l,E),q=Br.Utils.joinPath(l,o0.filePaths.dist.dfilesPath);await E.stat(q)&&await E.rm(q);for(let[S,P]of Object.entries(b))await Ec(l,E,S,P,g);return Object.keys(b).length&&(D.done(`${Object.keys(b).length} dfiles processed.`),await E.writeFile(Br.Utils.joinPath(l,o0.filePaths.dist.dfilesProperties),JSON.stringify(b,null," "))),j}s.process=e;async function t(l,E){let D=[],b={},j=await Bx.getApmPartDependencies(l,E,S0.Part.dfiles);for(let S of j){let{properties:P,diagnostics:T}=await a(E,S.path,S.name);Object.assign(b,P),D.push(...T)}let{properties:g,diagnostics:q}=await a(E,Br.Utils.joinPath(l,o0.filePaths.dfiles.mainDFILES),null);return Object.assign(b,g),D.push(...q),{properties:b,diagnostics:D,libraryFiles:j}}s.parseDfile=t;async function a(l,E,D){let b=[],j={};if(!await l.stat(E))return{properties:j,diagnostics:b};let g=await l.readFile(E),q=fc(g),S=new Ae.LineCounter,T=(0,Ae.parseDocument)(q,{lineCounter:S}).contents||new Ae.YAMLMap;for(let M of T.items){let N=M.key.value,z=(0,Ae.isMap)(M.value)?M.value:null,v0=un(S,M.key.range),R=z?z.has("syncMode"):!1,k=R?z.get("syncMode"):"crc_stamp";if(R){let W=Object.values(s.SyncLogic);if(!W.includes(k)){let n0=z.items.find(x0=>x0.key.value==="syncMode"),e0=un(S,n0.key.range);b.push({file:E,code:"",message:`Property syncMode does not match any of "${W.join(", ")}"`,line:e0.line,startCharacter:e0.startCharacter,endCharacter:e0.endCharacter,level:"error"})}}else b.push({file:E,code:"",message:'Property "syncMode" missing',line:v0.line,startCharacter:v0.startCharacter,endCharacter:v0.endCharacter,level:"error"});let O=z?z.has("type"):!1,V=O?z.get("type"):"static";if(O){let W=Object.values(s.Type);if(!W.includes(V)){let n0=z.items.find(x0=>x0.key.value==="type"),e0=un(S,n0.key.range);b.push({file:E,code:"",message:`Property type does not match any of "${W.join(", ")}"`,line:e0.line,startCharacter:e0.startCharacter,endCharacter:e0.endCharacter,level:"error"})}}N.match(/^[a-z0-9._-]*$/)||b.push({file:E,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:v0.line,startCharacter:v0.startCharacter,endCharacter:v0.endCharacter,level:"error"});let X=Br.Utils.joinPath(Br.Utils.dirname(E),N),H=await lc(l,X);if(H)j[N]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:V,library:D};else{let W=un(S,M.key.range);b.push({file:E,code:"",message:`Could not find file "${N}"`,line:W.line,startCharacter:W.startCharacter,endCharacter:W.endCharacter,level:"error"})}}return{properties:j,diagnostics:b}}s.parseYamlFile=a})(_t||={});async function lc(x,A){let r=await x.stat(A);if(!r)return null;let e=await x.readFile(A);return{size:r.size,stamp:Math.trunc(r.ctime),crc:T0.generateCRC32ForFileContent(e)}}async function Ec(x,A,r,e,t){let s=e.library!==null?Br.Utils.dirname(t.find(D=>D.name===e.library).path):Br.Utils.joinPath(x,o0.filePaths.dfiles.path),l=Br.Utils.joinPath(x,o0.filePaths.dist.dfilesPath,r),E=Br.Utils.joinPath(s,r);await A.copy(E,l)}var Gs=require("vscode-uri");var FF=nx(require("semver")),Bc="package.json",cc=["peerDependencies","dependencies","optionalDependencies"],Cc=" ",Ze;(e=>{e.PART_DIST_PATHS=[o0.filePaths.dist.bloPath,o0.filePaths.dist.povDetailsPath,o0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,a,s,l){let E=Gs.Utils.joinPath(t,Bc),D=`${s.name}/${jc(t)}`;if(!await a.stat(E))return!1;let j=await dc(a,E,D,l);if(!j)return!1;let g=j.pkg;if(typeof g!="object"||g===null||Array.isArray(g))return l.warn(`"${D}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!FF.valid(s.version))return l.warn(`Library manifest version "${s.version}" is not a valid semantic version - skipped normalizing "${D}/package.json".`),!1;Dc(g,s,D,l);let q=uc(g,s.version);g=q.pkg;let S=q.changed;S&&l.warn(`Patched version "${q.oldVersion??"<none>"}" -> "${s.version}" in "${D}/package.json" (studio.json is the source of truth).`);let P=bc(s);if(pc(g,P,D,l)&&(S=!0),!S)return!1;let T=mc(j.raw),M=j.raw.endsWith(`
|
|
2770
2783
|
`),N=JSON.stringify(g,null,T)+(M?`
|
|
2771
|
-
`:"");try{await a.writeFile(B,N)}catch(z){return l.warn(`Could not write "${D}/package.json": ${z}`),!1}return!0}e.normalizePartPackageJson=A;async function r(t,a,s,l){for(let B of e.PART_DIST_PATHS){let D=Rs.Utils.joinPath(t,B);await A(D,a,s,l)}}e.normalizeLibraryParts=r})(Ze||={});async function WB(x,A,r,e){try{let t=await x.readFile(A),a=T0.convertBlobToString(t),s=JSON.parse(a);return{raw:a,pkg:s}}catch(t){return e.warn(`Could not read/parse "${r}/package.json": ${t}`),null}}function XB(x,A,r,e){x.name!==void 0&&x.name!==A.name&&e.warn(`"${r}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function YB(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let r=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:e,...t}=x;x={name:e,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:r}}function QB(x,A,r,e){let t=!1;for(let a of zB){let s=x[a];if(!s)continue;let l=!1;for(let B of Object.keys(s)){if(!A.has(B))continue;let D=s[B];if(typeof D!="string"||D.startsWith("npm:")||D.includes("://")){e.warn(`Left "${B}" in ${a} of ${r}/package.json untouched - its value "${D}" does not look like a Studio library reference.`);continue}delete s[B],l=!0,t=!0,e.warn(`Removed "${B}" from ${a} of ${r}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}l&&Object.keys(s).length===0&&delete x[a]}return t}function ZB(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(r=>r.split("/")[1]))}function xc(x){let A=x.path.replace(/\\/g,"/");for(let r of Ze.PART_DIST_PATHS)if(A===r||A.endsWith(`/${r}`))return r;return A}function Ac(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:VB}var _t=require("@gera2ld/tarjs"),rF=T0.convertBlobToString,Os=require("pako"),Nx;(j=>{class x extends Error{_mergedDiagnostics;constructor(q,S){super(q),this.name="BuildError",this._mergedDiagnostics=S}get mergedDiagnostics(){return this._mergedDiagnostics}}j.BuildError=x;async function A(g,q,S,P,T,M=!0,N){M=rc(S,M),await ec(g,q,S,P,T,M);try{let L=await yx.read(g,q,S);await tc(g,q,S,L)}catch(L){S.warn("Could not generate defines.ts:",L)}let z={[S0.Part.dde]:[],[S0.Part.dlo]:[],[S0.Part.dfiles]:[]},v0={[S0.Part.dde]:nc,[S0.Part.dlo]:sc,[S0.Part.dfiles]:ic};try{for(let L of[S0.Part.dde,S0.Part.dlo,S0.Part.dfiles])if(M.includes(L)&&(S.info(`Building ${L.toUpperCase()}...`),await vc(S,L,v0[L],z[L],g,q)))return z}catch(L){throw N?new x(L?.message,z):L}return M.includes(S0.Part.pov)?await Cn.tryBuildPov(g,q,S):S.info("Skipping pov build"),M.includes(S0.Part.blo)?await Cn.tryBuildBlo(g,q,S):S.info("Skipping blo build"),await ac(g,q,S),await oc(g,q,S),S.done("Project build completed."),z}j.buildAll=A;async function r(g,q,S,P,T,M,N){let z=await Z.read(g,q);return Z.isLibrary(z)?(S.info("Library project detected. Publishing library..."),a(g,q,S,T,P)):(S.info("App project detected. Publishing app..."),t(g,q,S,T,M,N,P))}j.release=r;async function e(g,q,S,P,T,M){let N=await Z.read(g,q),z=`${N.name}-${N.version}.tar.gz`,v0=null;if(Z.isLibrary(N))S.info("Library project detected. Packing library..."),v0=await eF(g,q,S,T,P);else{S.info("App project detected. Packing app...");let k=await tF(g,q,S,T,M,P);v0=await lc(k)}let L=ke.Utils.joinPath(g,z);v0!==null?(await q.writeFile(L,v0),S.done(`Packaged: ${L.fsPath}`)):S.error(`Could not create archive: ${L.fsPath}`)}j.pack=e;async function t(g,q,S,P,T,M=null,N){if(!await S0.validateAccess(g,q,P,!1,N))throw new Error("Could not validate access to application");let v0=await tF(g,q,S,P,T,N);await S0.updateProfile(g,q,P,N);let L=await S0.publishTag(g,q,P,v0,N);if(M!==null){let k=await Z.read(g,q);await ux.updateExistingApplicationVersion(P,k.publisher,k.registry?.id,k.version,{allowedBackends:M},N),S.info(`Tag "${L.version}" with phase "${L.phase}" shared with ${[...M].join(";")}!`)}S.done(`Tag "${L.version}" with phase "${L.phase}" published!`)}j.releaseAPM=t;async function a(g,q,S,P,T){let M=await Z.read(g,q),N=await eF(g,q,S,P,T);await ge.publishPackage(P,M,N,T),S.done(`Library "${M.publisher}/${M.name}" with version "${M.version}" published!`)}j.releaseLibrary=a;async function s(g,q,S,P,T,M,N,z=null){if(M==="*"){let H=await Z.read(g,q);M=`${H.name}-${H.version}.tar.gz`,S.info(`Publishing detected archive package "${M}"...`)}let v0=ke.Utils.joinPath(g,M);if(!await q.stat(v0))throw new Error(`Archive package not found: ${v0.fsPath}`);let L=await q.readFile(v0),k=await Ec(L),{publisher:O,registry:W,version:X}=k;Z.isLibrary(k)?(await ge.publishPackage(P,k,L,T),S.done(`Library "${O}/${k.name}" with version "${k.version}" published!`)):(await ux.updateApplicationFile(P,O,W.id,X,"app.tar.gz",L,T),await ux.updateExistingApplicationVersion(P,O,W?.id,X,{allowedBackends:z||void 0,phase:N||void 0},T),S.info(`Tag "${X}" with phase "${N}" shared with ${[...z||""].join(";")}!`),S.done(`Tag "${X}" with phase "${N}" published!`))}j.publishArchive=s;async function l(g,q,S){let P;try{P=await q.readFile(ke.Utils.joinPath(g,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(rF(P)===o0.readme(S))throw new Error('"README.md" matches the default template. Please write a brief project description.');return P}j.getReadmeFile=l;async function B(g,q){let S;try{S=await q.readFile(ke.Utils.joinPath(g,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(rF(S)===o0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return S}j.getChangelogFile=B;async function D(g,q,S,P){let T=await Z.read(g,q),{name:M,publisher:N,description:z}=T,v0=Z.validateProjectName(M,Z.isLibrary(T));if(v0)throw new Error(`name: ${v0}`);let L=Z.validateDescription(z);if(L)throw new Error(`description: ${L}`);let k=Z.validatePublisherId(N)||await Z.validatePublisherOnline(S,N,P);if(k)throw new Error(`publisher: ${k}`);if(!Z.isLibrary(T)&&(await Z.validateApplicationIcon(g,q,T),Z.validateEngineSettings(T),Z.isApp(T)&&await Z.isApmPartEnabled(g,q,S0.Part.dlo,T)&&(!T.dpid||!Object.values(Z.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}j.validatePublishSettings=D;async function p(g,q){let S=Os.ungzip(g),P=await _t.TarReader.load(S),T={};for(let M of P.fileInfos)q.includes(M.name)&&(T[M.name]=P.getFileBlob(M.name));return T}j.readFilesFromTarGz=p})(Nx||={});function rc(x,A){let r=Object.values(S0.Part);return A===!0?(x.info("Building project..."),r):A===!1?[]:A}async function ec(x,A,r,e,t,a){await Bx.validateMinimumBackendVersion(x,A,r),a.includes(S0.Part.dde)&&await SA.fetchPreviousHistoryJson(x,A,r,e,t)}async function tc(x,A,r,e){e.defaultsOnly?(await yx.exportDefinesTs(x,A,e.defaultsOnly),r.log("Generated",o0.filePaths.dist.definesTs,"(defaults only)"),await yx.exportDefinesTs(x,A,e,o0.filePaths.dist.definesAppTs),r.log("Generated",o0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await yx.exportDefinesTs(x,A,e),r.log("Generated",o0.filePaths.dist.definesTs))}async function nc(x,A,r){let e=await SA.compileDDE(x,A,r);if(e.ddeJSON){await SA.exportMyDatanetXML(x,A,r,e.ddeJSON);let t=await Z.read(x,A);Z.isLibrary(t)||await SA.exportHistoryJson(x,A,r,e.ddeJSON),await SA.exportOpenApi(x,A,r,e.ddeJSON),await Z.isApmPartEnabled(x,A,S0.Part.dlo,t)&&(await SA.exportAutoDloFiles(x,A,r,e.ddeJSON),await kt.exportDloConfig(x,A,r))}return e.diagnostics}async function sc(x,A,r){let e=new Qe(x,A,r),{diagnostics:t}=await e.compile(x,A);return t}async function ic(x,A,r){return await yt.process(x,A,r)}async function ac(x,A,r){let e=await Z.read(x,A);Z.isLibrary(e)&&await Ze.normalizeLibraryParts(x,A,e,r)}async function oc(x,A,r){let e=ke.Utils.joinPath(x,o0.fileNames.reportTemplate);if(await A.stat(e)){let t=ke.Utils.joinPath(x,o0.filePaths.dist.reportTemplate);await A.copy(e,t),r.log(`Copied "${o0.fileNames.reportTemplate}" to dist folder.`)}}function Fc(x,A,r){A!==S0.Part.dlo&&fc(x,r);let e=r.some(t=>t.level==="error");if(e){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return e}async function vc(x,A,r,e,t,a){let s=await r(t,a,x);return e.push(...s),Fc(x,A,s)}function fc(x,A){A.forEach(r=>{let e=r.startCharacter?`:${r.startCharacter+1}`:"",t=`${r.file.path}:${r.line+1}${e} - ${r.message}`;r.level==="error"?x.error(t):r.level==="warning"?x.warn(t):x.log(t)})}async function eF(x,A,r,e,t){let a=await Z.read(x,A);return await Z.validateBasicManifest(x,A,a),await Nx.buildAll(x,A,r,t,e),await ge.createArchive(x,A)}async function tF(x,A,r,e,t,a){if(!Object.values(S0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await Z.validateBasicManifest(x,A,null),await Nx.buildAll(x,A,r,a,e),await S0.createTag(x,A,t)}async function lc(x){let A=new _t.TarWriter;for(let[e,t]of x.entries())if(e==="tag"){let a=t;A.addFile(e,a)}else{let a=t;A.addFile(e,await a.arrayBuffer())}let r=await A.write();return Os.gzip(await r.arrayBuffer())}async function Ec(x){let A=await Bc(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function Bc(x,A){let r=Os.ungzip(x),e=await _t.TarReader.load(r);for(let t of e.fileInfos)if(A.includes(t.name))return e.getFileBlob(t.name);return null}var cc=T0.bufferToBase64;var S0;(p=>{let x;(N=>(N.alpha="alpha",N.beta="beta",N.rc="rc",N.release="release",N.stage="stage",N.passive="passive",N.withdrawn="withdrawn"))(x=p.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=p.Part||={});function r(j){let{description:g,name:q,pov:S,engines:P,blo:T,publisher:M,type:N}=j,z=N||Z.ProjectTypes.app,v0={name:q,abstract:g,author:M||"",pov_location:Z.PovLocation.embedded,pov_details_lowlevel:!1,required_be:P?.backend,required_hwfw:P?.hwfw?.join(";"),required_productcode:P?.productId?.join(";"),blo_level:T?.accessLevel||Z.BloAccessLevel.restricted,pip_id:""};return S&&S.details&&(v0.pov_location=Z.PovLocation.pure,v0.pov_details_lowlevel=!!S.details.lowLevel),z==="addon"&&(v0.required_hwfw=void 0,v0.required_productcode=void 0,v0.addon_max_sources=1,v0.addon_max_per_site=j.maxInstancesPerSite),v0}p.createBaseTagHeader=r;async function e(j,g,q){let S=await Z.read(j,g),P=r(S),T={version:S.version,...P,phase:q};return await a(j,g,S,T)}p.createTag=e;async function t(j,g){let q=await Z.read(j,g),P={...r(q),blo_autostart:!1};return a(j,g,q,P)}p.createDevTag=t;async function a(j,g,q,S){let P=new FormData;P.append("tag",JSON.stringify(S)),P.append(`src/${Z.fileName}`,new Blob([await Z.readAsBlob(j,g)]));let T=new Blob([await g.readFile(Sr.Utils.joinPath(j,o0.filePaths.dist.ddeXmlPath))]);if(P.append("bin/dde/xml",T),q.icon){let N=await g.readFile(Sr.Utils.joinPath(j,q.icon)),z=cc(N);P.append("previews/00.png",new Blob([`data:image/png;base64,${z}`]))}if(Object.hasOwn(S,"phase")){let N=await Nx.getReadmeFile(j,g,S.name),z=await Nx.getChangelogFile(j,g);P.append("previews/README.md",new Blob([N])),P.append("previews/CHANGELOG.md",new Blob([z]))}if(await Z.isApmPartEnabled(j,g,"dlo")){let N=new Blob([await g.readFile(Sr.Utils.joinPath(j,o0.filePaths.dist.mainAmxPath))]);P.append("bin/dlo/amx",N)}if(await Z.isApmPartEnabled(j,g,"pov",q)){await nF(j,g,P,o0.filePaths.dist.povDetailsPath,"bin/pov/details");let N=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');P.append("bin/pov/list/index.html",new Blob([N]))}let M=await g.findFiles(j,`${o0.filePaths.dist.dfilesPath}/*`);for(let N of M){let z=new Blob([await g.readFile(N)]);P.append(`bin/dfiles/${Sr.Utils.basename(N)}`,z)}return await Z.isApmPartEnabled(j,g,"blo",q)&&await nF(j,g,P,o0.filePaths.dist.bloPath,"bin/blo"),await Cc(j,g,P),P}p.createBuffer=a;async function s(j,g,q,S,P){let T=await Z.read(j,g);S||await Nx.validatePublishSettings(j,g,q,P);let{registry:M}=T,N=M?.id;if(!N&&!S&&(N=await l(j,g,q,T,P)),N){let{publisher:z}=T;if(!z)return null;try{return{id:N,...await ux.getExistingApplication(q,z,N,P)}}catch(v0){if(v0?.message==="Could not find given application")return N=await l(j,g,q,T,P),{id:N,...await ux.getExistingApplication(q,z,N,P)}}}return null}p.validateAccess=s;async function l(j,g,q,S,P){let T="myDatanet",{publisher:M,name:N,description:z,registry:v0}=S,L={id:v0?.id,type:S.type||Z.ProjectTypes.app,name:N,targetSystem:T,description:z||"",allowedBackends:null};Z.isAddon(S)&&(L.allowedApplications=null);let k=await ux.createNewApplication(q,M,L,P);if(!k)throw new Error("Failed to initialize application");return S.registry={id:k},await Z.write(j,g,S),k}p.registerNew=l;async function B(j,g,q,S){let{name:P,publisher:T,description:M,registry:N}=await Z.read(j,g),z=N?.id;await ux.updateExistingApplication(q,T,z,{description:M,name:P,targetSystem:"myDatanet"},S)}p.updateProfile=B;async function D(j,g,q,S,P){let{publisher:T,registry:M,version:N}=await Z.read(j,g);return await ux.publishApplicationVersion(q,T,M?.id,N,S,P)}p.publishTag=D})(S0||={});async function nF(x,A,r,e,t){let a=await A.findFiles(x,`${e}/**`);for(let s of a){let l=Sr.Utils.joinPath(x,e),B=s.path.substring(l.path.length+1),D=new Blob([await A.readFile(Sr.Utils.joinPath(x,`${e}/${B}`))]);r.append(`${t}/${B}`,D)}}async function Cc(x,A,r){let e=Sr.Utils.joinPath(x,o0.filePaths.dist.reportTemplate);if(await A.stat(e)){let a=new Blob([await A.readFile(e)]);r.append("bin/pov/mdn_report_template.json",a)}let t=Sr.Utils.joinPath(x,o0.filePaths.dist.historyJson);await A.stat(t)&&r.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var vF=require("deepmerge-ts"),dc=T0.isNumeric,sF="52v007",iF="53v001",Dc="54v001",uc="56v001",qA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,vF.deepmerge)(structuredClone(this._manifest),qA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},Z;(f0=>{let x=T0.convertBlobToString;f0.fileName="studio.json";let r;(L0=>(L0.m22x="m22x",L0.m23x="m23x",L0.nrf91="nrf91",L0.m2blegw="m2blegw",L0.m2easyv3="m2easyv3",L0.m2easyiot="m2easyiot"))(r=f0.DeviceProfiles||={});let e;(p0=>(p0.app="app",p0.library="library",p0.addon="addon",p0.analytics="analytics"))(e=f0.ProjectTypes||={});let t;(E0=>(E0.restricted="restricted",E0.global="global"))(t=f0.BloAccessLevel||={});let a;(E0=>(E0.embedded="$embedded",E0.pure="$pure"))(a=f0.PovLocation||={});function s(U){qA.overwrites=U}f0.setOverwrites=s;function l(){qA.overwrites=null}f0.clearOverwrites=l;async function B(U,F0){let E0=xt.Utils.joinPath(U,f0.fileName),b0=await F0.stat(E0);if(qA.manifest===null||E0?.fsPath!==qA.stat?.path.fsPath||b0?.ctime!==qA.stat?.ctime||b0?.mtime!==qA.stat?.mtime||b0?.size!==qA.stat?.size){let p0=await F0.readFile(E0),N0=x(p0);qA.manifest=JSON.parse(N0),qA.stat={...b0,path:E0}}return qA.manifest}f0.read=B;async function D(U,F0){return await F0.readFile(xt.Utils.joinPath(U,f0.fileName))}f0.readAsBlob=D;async function p(U,F0){let E0=xt.Utils.joinPath(U,f0.fileName),b0=await F0.readFile(E0),p0=x(b0);return JSON.parse(p0)}f0.readRaw=p;async function j(U,F0,E0){return qA.clear(),kc(E0),F0.writeFile(xt.Utils.joinPath(U,f0.fileName),JSON.stringify(E0,null," "))}f0.write=j;function g(U){return U.library!==void 0?U.library:U.type==="library"}f0.isLibrary=g;function q(U){return U.type==="addon"}f0.isAddon=q;function S(U){return U.type===void 0&&!g(U)?!0:U.type==="app"}f0.isApp=S;function P(U){return U.type===void 0?!0:U.type==="app"}f0.isIotApp=P;function T(U){return U.type==="analytics"}f0.isAnalytics=T;async function M(U,F0,E0){E0||(E0=await B(U,F0)),gc(E0),bc(E0),pc(E0),hc(E0)}f0.validateBasicManifest=M;function N(U){let F0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let b0=["-","_"];if(b0.includes(U[0])||b0.includes(U[U.length-1]))return F0}else return F0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}f0.validateLibraryName=N;function z(U,F0){if(F0)return N(U);{let E0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return E0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let p0=["-","_"," "];return p0.includes(U[0])||p0.includes(U[U.length-1])?E0:null}}f0.validateProjectName=z;function v0(U){return U.length<5?"The description must have at least 5 characters.":null}f0.validateDescription=v0;function L(U){if(!U)return"No publisher set yet";let F0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let b0=["_"];if(b0.includes(U[0])||b0.includes(U[U.length-1]))return F0}else return F0;return null}f0.validatePublisherId=L;async function k(U,F0,E0){return await ux.getPublisher(U,F0,E0)?null:`Publisher '${F0}' does not exist.`}f0.validatePublisherOnline=k;let O=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function W(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let E0 of F0)if(!E0.match(O))return`Domain "${E0}" is invalid`}else if(!U?.match(O)&&U!=="*")return'Invalid value for "allowedBackends"';return null}f0.validateRegistryAllowedBackends=W;let X=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let E0 of F0)if(!E0.match(X))return`Application id "${E0}" is invalid`}else if(!U?.match(X)&&U!=="*")return'Invalid value for "allowedApplications"';return null}f0.validateRegistryAllowedApplications=H;async function V(U,F0,E0){let b0=E0.icon;if(!b0)throw new Error("App icon is required for publishing an application!");let p0=xt.Utils.joinPath(U,b0);if(!await F0.stat(p0))throw new Error(`Could not load icon "${b0}"`);let L0=await F0.readFile(p0),cx=(0,aF.imageDimensionsFromData)(L0);if(!cx)throw new Error("App icon could not be validated!");if(cx?.width!==cx?.height)throw new Error("App icon has to be a square!");if(cx.width>512||cx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,oF.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}f0.validateApplicationIcon=V;function n0(U){let{engines:F0}=U;if(F0?.backend&&!F0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');jc(U),mc(U)}f0.validateEngineSettings=n0;function e0(U,F0){let E0=N0=>{let L0=/^(\d+)v(\d+)$/.exec(N0);return L0?[Number(L0[1]),Number(L0[2])]:null},b0=E0(U),p0=E0(F0);return b0&&p0?b0[0]-p0[0]||b0[1]-p0[1]:U===F0?0:U<F0?-1:1}f0.compareBackendVersion=e0;async function x0(U,F0,E0,b0){b0||(b0=await f0.read(U,F0));let p0=f0.isAddon(b0),N0=f0.isAnalytics(b0);switch(E0){case S0.Part.dlo:return!!b0?.dlo?.mainFile&&!p0&&!N0;case S0.Part.blo:return!!(b0.blo?.buildCommand&&b0.blo?.workingPath);case S0.Part.pov:return!!(b0.pov?.details?.buildCommand&&b0.pov.details.workingPath);case S0.Part.dde:case S0.Part.dfiles:return!0;default:return!1}}f0.isApmPartEnabled=x0})(Z||={});function bc(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function pc(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function jc(x){let{backend:A,productId:r,hwfw:e}=x.engines;if(Z.isAddon(x)&&(r||e))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=sF){if(e&&r)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(r)throw new Error(`"engines.productId" requires "engines.backend" to be "${sF}"`)}function mc(x){if(!Z.isAddon(x)&&!Z.isAnalytics(x))return;let{backend:A}=x.engines,r=Z.isAddon(x)?Dc:uc;if(!A||A<r)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${r}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function hc(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(Z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!Z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function gc(x){if((x.engines?.backend||"00v000")>=iF||Z.isLibrary(x)){if(!FF.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${iF} onwards "version" has to be a semantic version string!"`)}else if(!dc(x.version))throw new Error('"version" has to be a number!')}function kc(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var cr=nx(require("semver"));var cF=require("minimatch");var yc=require("tinytar-fix"),_c=require("pako"),qr=".studio/libdeps",ye="package.json",wc="package-lock.json";function Gs(x){let A=x.dlo?.mainFile,r=[{partName:"blo",partDistPath:"blo",workingPath:fF(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:fF(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?Sc(A):void 0}],e=[],t=[],a=new Set;for(let s of r){if(s.workingPath!==void 0){if(a.has(s.workingPath)){t.push(s);continue}a.add(s.workingPath)}e.push(s)}return{parts:e,duplicates:t}}function Us(x,A){for(let r of x)A.warn(`Skipping npm part "${r.partName}" - its working path (${r.workingPath}) is already used by another part in studio.json`)}function un(x){let A=x.replace(/\\/g,"/").split("/").filter(r=>r!==""&&r!==".");if(!A.some(r=>r===".."))return A.join("/")}function fF(x){if(x)return un(x)||void 0}function Sc(x){let A=un(x);if(A===void 0)return;let r=A.lastIndexOf("/");return r===-1?void 0:A.slice(0,r)}function lF(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Bx.dependencyIdToName)}async function qc(x,A,r,e){let t=hx.Utils.joinPath(x,qr,e);try{return await A.stat(hx.Utils.joinPath(t,Z.fileName))?await Z.readRaw(t,A):null}catch(a){return r.warn(`Could not read manifest for library "${e}": ${a}`),null}}async function Tc(x,A,r,e){let t=new Set,a=lF(e),s=null;for(;a.length>0;){let l=a.shift();if(t.has(l))continue;t.add(l);let B=await qc(x,A,r,l);if(!B)continue;let D=B.engines?.backend;D&&(!s||Z.compareBackendVersion(D,s.backend)>0)&&(s={backend:D,requiredBy:`${B.publisher}/${B.name}`}),a.push(...lF(B))}return s}var Bx;(L=>{async function x(k,O=!1){let W={...k.libraryDependencies||{}};return O||Object.assign(W,k.libraryDevDependencies||{}),W}L.getAll=x;function A(k){return k.split("/")[1]}L.dependencyIdToName=A;function r(k,O){let W=A(O);return hx.Utils.joinPath(k,qr,W)}L.dependencyToPath=r;function e(k){return isNaN(k.split("")[0])?k.substring(1):k}L.rangeToVersion=e;function t(k,O,W){if(!cr.satisfies(O,W,{includePrerelease:!0}))throw new Error(`${k}, version ${O} does not satisfy required constraint ${W}`)}L.satisfiesSemverRange=t;async function a(k,O,W={},X=!1){let H=await Z.read(k,O),V=H.libraryDependencies||{};X&&Object.assign(V,H.libraryDevDependencies);let n0=Object.keys(W);for(let e0 of n0)if(Object.hasOwn(V,e0)){let x0=W[e0],f0=V[e0],U=e(x0),F0=e(f0),E0=cr.compare(U,F0);E0===1?(V[e0]=x0,t(e0,U,f0)):E0===-1&&(V[e0]=f0,t(e0,F0,x0))}else V[e0]=W[e0];return V}L.validateDependencyTree=a;async function s(k,O,W,X,H){let V=e(H),n0=hx.Utils.joinPath(k,qr,X);try{let e0=await Z.read(n0,O);return cr.gte(e0.version,V)&&e0.publisher.toLowerCase()===W.toLowerCase()}catch{return!1}}L.isDependencyInstalled=s;async function l(k,O,W,X){let H=hx.Utils.joinPath(k,qr,X);await O.rm(H).catch(V=>{W.error("removeExisting",V)})}L.removeExisting=l;async function B(k,O,W,X,H){let V=yc.untar(_c.ungzip(H));await l(k,O,W,X);for(let n0 of V.values())try{let e0=hx.Utils.joinPath(k,qr,X,n0.name);await O.writeFile(e0,n0.data)}catch(e0){W.error("Extracting lib",e0)}}L.extractLibraryContent=B;async function D(k,O,W,X,H,V,n0,e0=!1){let[x0,f0]=V.split("/");if(n0&&await s(k,O,x0,f0,n0))return;await l(k,O,W,f0);let U=await ux.getLibraryProfile(H,x0,f0,X),F0=n0?U.versions?.find(O0=>cr.eq(O0.name,L.rangeToVersion(n0))):U.versions[0];if(!F0)throw new Error(`Library ${V} with version ${n0} does not exist!`);let E0=F0.files.find(O0=>O0.name==="studio.json"),p0=(await $c(H,E0.downloadUrl)).libraryDependencies||{},N0={...p0};N0[V]=`^${F0.name}`,await a(k,O,N0,e0);for(let[O0,sx]of Object.entries(p0))await D(k,O,W,X,H,O0,sx,e0);let L0=F0.files.find(O0=>O0.name==="library.tar.gz");if(!L0)throw new Error(`Library ${V} has no content!`);let cx=await ux.fetchCustomContent(H,L0.downloadUrl);await B(k,O,W,f0,cx),await z(k,O,W,f0,e0);let eA=await Z.read(k,O),NA=eA.libraryDependencies||{},Ux=eA.libraryDevDependencies||{},U0=e0?Ux:NA;U0[V]=`^${F0.name}`,eA.libraryDependencies=NA,eA.libraryDevDependencies=Ux,await Z.write(k,O,eA)}L.installDependency=D;async function p(k,O,W,X,H){let V=await Z.read(k,O),n0=V.libraryDependencies||{},e0=V.libraryDevDependencies||{},x0=Object.assign(n0,e0);for(let[f0,U]of Object.entries(x0)){let F0=Object.hasOwn(e0,f0);await D(k,O,W,X,H,f0,U,F0)}for(let[f0]of Object.entries(x0)){let U=A(f0),F0=Object.hasOwn(e0,f0);await z(k,O,W,U,F0)}W.done(`Installed ${Object.entries(x0).length} dependencies`)}L.installDependencies=p;async function j(k,O,W,X,H){let V=await Z.read(k,O),n0=V.libraryDependencies||{},e0=V.libraryDevDependencies||{},x0=Object.assign(n0,e0),f0=`${X}/${H}`;delete x0[f0];let U=await Pc(k,O,x0);if(!Object.hasOwn(U,f0))await v0(k,O,W,H),await l(k,O,W,H),delete e0[f0],delete n0[f0],await Z.write(k,O,V);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}L.uninstallDependency=j;async function g(k,O){try{let X=(await CF(hx.Utils.joinPath(k,ye),O)).workspaces;if(Array.isArray(X)&&X.every(V=>typeof V=="string")&&X.length>0)return X;let H=X?.packages;return Array.isArray(H)&&H.every(V=>typeof V=="string")&&H.length>0?H:null}catch{return null}}L.readNpmWorkspacePatterns=g;function q(k,O){let W=un(k);return W===void 0?!1:O.some(X=>{let H=un(X);return H===void 0?!1:H===W||(0,cF.minimatch)(W,H)})}L.isPathInWorkspaces=q;function S(k,O){if(!O)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let W=[],X=!1;for(let H of k)q(H.workingPath,O)?X=!0:W.push(H.workingPath);return{rootInstall:X,partInstalls:W}}L.planNpmInstalls=S;async function P(k,O,W){let X=await Z.read(k,O),H=new Set([...Object.keys(X.libraryDependencies||{}),...Object.keys(X.libraryDevDependencies||{})].map(A)),V=new Set,n0=[...H];for(;n0.length>0;){let e0=n0.shift();if(V.has(e0))continue;V.add(e0);let x0=hx.Utils.joinPath(k,qr,e0);try{let f0=hx.Utils.joinPath(x0,Z.fileName);if(!await O.stat(f0))continue;let U=await Z.readRaw(x0,O);await Ze.normalizeLibraryParts(x0,O,U,W),n0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(f0){W.warn(`Could not normalize library parts for "${e0}": ${f0}`)}}}L.normalizeInstalledLibraryParts=P;async function T(k,O,W){let X=await Z.read(k,O),H=await Tc(k,O,W,X);if(!H)return;let V=X.engines?.backend;if(!V||Z.compareBackendVersion(H.backend,V)>0){let n0=V?`"${V}"`:"none",e0=Z.isLibrary(X)?"library":"application",x0=Z.isLibrary(X)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${e0} "${X.publisher}/${X.name}" declares ${n0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}L.validateMinimumBackendVersion=T;async function M(k,O,W){await P(k,O,W);let X=await Z.read(k,O),{parts:H,duplicates:V}=Gs(X);Us(V,W);let n0=H.filter(({workingPath:F0})=>!!F0).map(({partName:F0,workingPath:E0})=>({name:F0,workingPath:E0})),e0=[];for(let F0 of n0){let E0=hx.Utils.joinPath(k,F0.workingPath),b0=hx.Utils.joinPath(E0,ye);await O.stat(b0)&&e0.push(F0)}if(e0.length===0)return;let x0=await g(k,O),{rootInstall:f0,partInstalls:U}=S(e0,x0);if(f0){let F0=e0.filter(E0=>!U.includes(E0.workingPath)).map(E0=>E0.workingPath).join(", ");W.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${F0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await Dn(k,["install","--no-audit","--no-fund"],W)}for(let F0 of e0){if(!U.includes(F0.workingPath))continue;x0?W.warn(`${F0.workingPath} (${F0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):W.info(`Installing npm dependencies for ${F0.name} (${F0.workingPath})...`);let E0=hx.Utils.joinPath(k,F0.workingPath);await Mc(E0,O,W)}}L.installNpmInApmParts=M;async function N(k,O,W,X=!1){let H=await Z.read(k,O),V=await x(H,X),n0=[],e0=o0.filePaths[W].path,x0=W===S0.Part.dlo?"inc":"dfiles";for(let f0 in V){let U=L.dependencyToPath(k,f0),F0=L.dependencyIdToName(f0),E0=hx.Utils.joinPath(U,e0,`${F0}.${x0}`);await O.stat(E0)&&n0.push({name:F0,path:E0})}if(Z.isLibrary(H)){let f0=hx.Utils.joinPath(k,e0,`${H.name}.${x0}`);await O.stat(f0)&&n0.push({name:H.name,path:f0})}return n0}L.getApmPartDependencies=N;async function z(k,O,W,X,H){let V=await Z.read(k,O),{parts:n0,duplicates:e0}=Gs(V);Us(e0,W);for(let{partName:x0,partDistPath:f0,workingPath:U}of n0){if(!U)continue;let F0=hx.Utils.joinPath(k,qr,X,"dist",...f0.split("/"),ye);if(!await O.stat(F0))continue;let b0=hx.Utils.joinPath(k,U,ye);if(!await O.stat(b0)){W.info(`${U} (${x0}) has no package.json, skipping link`);continue}try{let p0=await EF(k,O,U),N0=H?"devDependencies":"dependencies";p0[N0]=p0[N0]||{};let L0=U.split("/").length,cx=Array(L0).fill("..").join("/");p0[N0][X]=`file:${cx}/${qr}/${X}/dist/${f0}`,await BF(k,O,U,p0),W.info(`Linked ${X} to ${x0} (${U})`)}catch(p0){W.warn(`Could not link ${X} to ${x0}: ${p0}`)}}}L.linkLibraryApmParts=z;async function v0(k,O,W,X){let H=await Z.read(k,O),{parts:V,duplicates:n0}=Gs(H);Us(n0,W);for(let{partName:e0,workingPath:x0}of V){if(!x0)continue;let f0=hx.Utils.joinPath(k,x0,ye);if(await O.stat(f0))try{let U=await EF(k,O,x0),F0=!1;U.dependencies?.[X]?.startsWith("file:")&&(delete U.dependencies[X],F0=!0),U.devDependencies?.[X]?.startsWith("file:")&&(delete U.devDependencies[X],F0=!0),F0&&(await BF(k,O,x0,U),W.info(`Unlinked ${X} from ${e0}`))}catch(U){W.warn(`Could not unlink ${X} from ${e0}: ${U}`)}}}L.unlinkLibraryApmParts=v0})(Bx||={});async function CF(x,A){let r=await A.readFile(x);return JSON.parse(T0.convertBlobToString(r))}function EF(x,A,r){return CF(hx.Utils.joinPath(x,r,ye),A)}async function BF(x,A,r,e){let t=hx.Utils.joinPath(x,r,ye),a=JSON.stringify(e,null," ")+`
|
|
2772
|
-
`;await A.writeFile(t,a)}async function
|
|
2773
|
-
`,"utf8")}).catch(e=>{this.logger?.warn(`Could not append to log file: ${e instanceof Error?e.message:e}`)}))}since(A=0,r=Rv){let e=r>0?r:Rv;return this.buffer.filter(t=>t.seq>A).slice(-e)}get lastSeq(){return this.seq}attachUtoMaster(A){let r=e=>{if(e.wTagFull!==Le.UtoTag.LOG||!e.data)return;let t=new Uint8Array(e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",r),this.disposers.push(()=>A.off("utoFrame",r))}attachAtHandler(A){let r=new Le.DebugMaster(A,Me(this.logger??new Tr.Logger));r.on("message",e=>{let t=u7(e);t&&this.push("at",t)}),this.disposers.push(()=>r.dispose())}pushDecoded(A,r){let t=[Ov(Hv.default.decode(Buffer.from(r),"win1252")),Ov(Buffer.from(r).toString("utf8"))].find(b7);if(t){this.push(A,t);return}let a=Buffer.from(r.subarray(0,32)).toString("hex");this.push(A,`<${r.length} bytes> ${a}${r.length>32?"\u2026":""}`,r)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Kv=require("node:events"),QA=nx(ne()),p7=1e3,j7=1e4,m7=200,Jv=new Set([QA.UtoTag.HISTDATA_RAW,QA.UtoTag.LOG,QA.UtoTag.ALERTS]),xs=class extends Kv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let r of A.model.containers){let e=(0,QA.resolveTagForContainer)(r);e!==null&&this.containerByTag.set(e,r)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((r,e)=>{this.tagMap.set(r.wTag,{index:e,sTag:r.sTag,historic:r.flags.historic}),(this.containerByTag.has(r.wTag)||Jv.has(r.wTag))&&this.relevantTags.add(r.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[r,e]of this.tagMap)e.index<A.stamps.length&&this.deviceStamps.set(r,A.stamps[e.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:p7,j7),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let r=[];for(let e of this.relevantTags){let t=await this.pullIfAdvanced(e,A);t&&r.push(t)}if(r.length>0){this.lastChangeAt=Date.now();for(let e of r)this.emit("container-changed",e)}return r}async pullIfAdvanced(A,r){let e=this.tagMap.get(A);if(!e||e.index>=r.length)return null;let t=r[e.index],a=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let s=await this.mirrorStamp(A);return(a===void 0?t>s:t!==a)?this.pull(A,e,s,t):null}async pullTags(A){let r=[];for(let e of A){let t=this.tagMap.get(e)??{index:-1,sTag:`0x${e.toString(16)}`,historic:!1},a=await this.mirrorStamp(e),s=await this.pull(e,t,t.historic?a:0,this.deviceStamp(e)??0);s&&(r.push(e),this.emit("container-changed",s))}return r}async mirrorStamp(A){let r=await this.opts.storage.getLatestStampForTag(A);return r?(0,QA.dbStampToStamp40)(r):0}async pull(A,r,e,t){return r.historic||Jv.has(A)?this.pullHistoric(A,e,t):this.pullSingle(A,t)}async pullSingle(A,r){let e=await this.utoMaster.requestUto(A,0);if(!e)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,QA.stamp40ToDbHex)(e.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:e.data?h7(e.data):null}),this.describeChange(A,e.stamp||r)}async pullHistoric(A,r,e){let t=await this.opts.storage.getRowForTag(A),a=0,s=r,l=async B=>{let D=B.filter(p=>p.stamp40>r).map(p=>(s=Math.max(s,p.stamp40),{tag:A,stamp:(0,QA.stamp40ToDbHex)(p.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:p.data}));await this.opts.storage.insertHistoricRows(D),a+=D.length};return await this.utoMaster.requestHistoricUtos(A,r,void 0,void 0,m7,l),a===0?null:this.describeChange(A,s||e)}async describeChange(A,r){let e=this.containerByTag.get(A);if(!e)return{tag:A,container:null,stamp:r};let t=null;try{t=await this.opts.mapper.readContainer(e.name)}catch{}return{tag:A,container:e.name,alias:e.alias,stamp:r,decoded:t}}};function h7(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Gt=(l=>(l[l.Success=0]="Success",l[l.BuildFailed=1]="BuildFailed",l[l.DeviceNotFound=2]="DeviceNotFound",l[l.UsbFailed=3]="UsbFailed",l[l.ModelMissing=7]="ModelMissing",l[l.UnknownContainer=8]="UnknownContainer",l[l.WriteForbidden=9]="WriteForbidden",l))(Gt||{}),kx=class extends Error{constructor(r,e){super(r);this.exitCode=e;this.name="DevError"}exitCode},g7=2e3,k7=3e3,y7=3e4,_7=1e4,w7=3e4,S7=1e3,ia="dev",zv=`/api/1/sites/${ia}`,Vv="local",As="Device not connected",Wv="device_id",aa=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,r){this.depth++;let e=this.tail,t=()=>{};this.tail=new Promise(a=>{t=a});try{await q7(e,r)}catch(a){throw this.depth--,e.then(t,t),a}try{return await A()}finally{this.depth--,t()}}};function q7(x,A){return new Promise((r,e)=>{let t=setTimeout(()=>e(new kx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),r()})})}var Re=class extends Yv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new aa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??Dx.systemTimeSource,this.logStream=new at({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",r=>this.emit("log",r))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new kx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new kx("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new kx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Qn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new Dx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new kx(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=sa.Utils.joinPath(this.opts.cwd,o0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new kx(`No DDE model at ${o0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let r=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,Dx.parseDde)(r)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await na(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let a=t instanceof Error?t.message:String(t);throw new kx(`Could not open device ${this.opts.serial}: ${a}`,/not found/i.test(a)?2:3)}let{utoMaster:A,atHandler:r}=this.device;if(!r)throw new kx(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(r),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(Wv)===null&&await this.storage.setMetadataValue(Wv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new kx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let e=Me(this.logger);this.stateManager=new Dx.Rm2mStateManager(r,e),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new Dx.LocalDataManager(r,e),this.offlineSync=new Dx.OfflineSyncManager(A,this.storage,e)}async startPoller(){this.poller=new xs({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??g7,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new kx(As,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new kx(As,3);return this.device.atHandler}buildApiHandler(){let A={container:async(e,t,a)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(Dx.UtoCommand.DATA,e,t,a))},adHocChangeRequest:async(e,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(e,t)),backfill:async()=>(await this.sync(),"ready")},r={siteUid:ia,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,Dx.createSiteInfoFromDde)(this.ddeModel,{siteUid:ia,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Vv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,Dx.createLocalApiHandler)(r)}buildBlueprint(){let A={};for(let r of this.ddeModel.containers){let e={};for(let t of r.fields){let a=t.alias??t.name;e[a.toLowerCase()]={alias:a}}A[r.name.toLowerCase()]=e}return A}async handleApi(A){if(!this.apiHandler)throw new kx("Session not started",7);let r=this.writtenTag(A),e=await this.apiHandler(A);if(r===null||e.status>=400)return e;let t=await this.mirrorStamp(r);return await this.awaitDeviceStamp(r,t)||(e.headers={...e.headers,"x-mt-mirror":"stale"}),e}writtenTag(A){let r=A.method.toUpperCase();if(r!=="PUT"&&r!=="POST")return null;let[e,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let a=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(e);if(!a)return null;let s=(0,Dx.resolveTagInModel)(this.ddeModel,decodeURIComponent(a[1]));return s===null||!(0,Dx.isDevicePushableTag)(s)||this.poller?.knowsTag(s)===!1?null:s}async awaitDeviceStamp(A,r){let e=this.opts.waitMs??k7,t=this.poller;if(e<=0||!t)return!0;let a=Date.now()+e;for(;;){let l=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(l!==null&&l>=r)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=a)return!1;await Xv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await Z.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await Nx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??yx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof Nx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let r=sa.Utils.joinPath(this.opts.cwd,A??o0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Mv)(this.opts.serial,r,this.opts.fs,this.logger,this.opts.debug,_7,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+w7;for(let r=0;;r++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(e){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(e);return}r===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Xv(S7)}}reportReconnectFailure(A){let r=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${r}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(r))}async sync(A){let r=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(a=>a.outcome==="upload").map(a=>a.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let e={tags:r,at:this.lastSyncAt};return this.emit("sync",e),e}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new kx(As,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new kx(As,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Vv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,Dx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},r=[];for(let e of this.configContainers()){let t=e.alias??e.name;r.push(t);let a=await this.handleApi({path:`${zv}/containers/${encodeURIComponent(e.name)}`,method:"GET"});A[t]=a.status<400&&a.body?JSON.parse(a.body):{}}return{configs:A,order:r}}async applyConfigs(A){let r={};for(let[e,t]of Object.entries(A)){let a=this.ddeModel.byNameOrAlias(e);if(!a||a.kind!=="config"){r[e]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${e}"`};continue}let s=await this.handleApi({path:`${zv}/containers/${encodeURIComponent(a.name)}`,method:"PUT",body:JSON.stringify(t)});r[e]=s.status>=400?{ok:!1,err:T7(s.body)}:s.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return r}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let r=await this.storage.getLatestStampForTag(A);return r?(0,Dx.dbStampToStamp40)(r):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??y7)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Xv(x){return new Promise(A=>setTimeout(A,x))}function T7(x){try{return JSON.parse(x).err??x}catch{return x}}var ef=nx(require("node:http")),tf=require("vscode-uri"),nf=nx(require("yaml"));var sf=["log","state","sync","build","uto","container-changed","error"],$7=15e3,Qv=4*1024*1024,P7="127.0.0.1",N7=8765,af="no-store",of="E_NOT_FOUND",Zv="E_BAD_REQUEST",I7=2e3,M7=20;function Oe(x,A){return JSON.stringify({err:`${x} ${A}`})}function ur(x,A,r,e={}){x.writeHead(A,{"content-type":"application/json","cache-control":af,...e}),x.end(r)}function L7(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function R7(x,A){if(!(L7(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function O7(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function G7(x,A){let r=x.headers.origin;typeof r=="string"&&O7(r)&&(A.setHeader("access-control-allow-origin",r),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function U7(x,A,r){if(!A)return!0;let e=x.headers.authorization,t=typeof e=="string"?e.replace(/^Bearer\s+/i,"").trim():(r??"").trim();if(t==="")return!1;let a=process.env.MYDATANET_TOKEN;return t===A||a!==void 0&&a!==""&&t===a}var se=class extends Error{constructor(r,e,t){super(t);this.status=r;this.code=e}status;code};async function Ff(x){let A=[],r=0;for await(let e of x){let t=e;if(r+=t.length,r>Qv)throw x.pause(),new se(413,"E_TOO_LARGE",`request body exceeds ${Qv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function vf(x){return x!=="GET"&&x!=="HEAD"}function xf(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new se(400,Zv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new se(400,Zv,"JSON body must be an object");return A}function Af(x,A){let r=x[A];return typeof r=="string"&&r.length>0?r:void 0}function H7(x,A){let r=x[A];if(!Array.isArray(r))return;let e=r.map(Number).filter(t=>Number.isFinite(t));return e.length>0?e:void 0}function rf(x,A,r){let e=Number.parseInt(x.get(A)??"",10);return Number.isFinite(e)?e:r}var oa=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2784
|
+
`:"");try{await a.writeFile(E,N)}catch(z){return l.warn(`Could not write "${D}/package.json": ${z}`),!1}return!0}e.normalizePartPackageJson=A;async function r(t,a,s,l){for(let E of e.PART_DIST_PATHS){let D=Gs.Utils.joinPath(t,E);await A(D,a,s,l)}}e.normalizeLibraryParts=r})(Ze||={});async function dc(x,A,r,e){try{let t=await x.readFile(A),a=T0.convertBlobToString(t),s=JSON.parse(a);return{raw:a,pkg:s}}catch(t){return e.warn(`Could not read/parse "${r}/package.json": ${t}`),null}}function Dc(x,A,r,e){x.name!==void 0&&x.name!==A.name&&e.warn(`"${r}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function uc(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let r=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:e,...t}=x;x={name:e,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:r}}function pc(x,A,r,e){let t=!1;for(let a of cc){let s=x[a];if(!s)continue;let l=!1;for(let E of Object.keys(s)){if(!A.has(E))continue;let D=s[E];if(typeof D!="string"||D.startsWith("npm:")||D.includes("://")){e.warn(`Left "${E}" in ${a} of ${r}/package.json untouched - its value "${D}" does not look like a Studio library reference.`);continue}delete s[E],l=!0,t=!0,e.warn(`Removed "${E}" from ${a} of ${r}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}l&&Object.keys(s).length===0&&delete x[a]}return t}function bc(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(r=>r.split("/")[1]))}function jc(x){let A=x.path.replace(/\\/g,"/");for(let r of Ze.PART_DIST_PATHS)if(A===r||A.endsWith(`/${r}`))return r;return A}function mc(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Cc}var wt=require("@gera2ld/tarjs"),vF=T0.convertBlobToString,Us=require("pako"),Nx;(j=>{class x extends Error{_mergedDiagnostics;constructor(q,S){super(q),this.name="BuildError",this._mergedDiagnostics=S}get mergedDiagnostics(){return this._mergedDiagnostics}}j.BuildError=x;async function A(g,q,S,P,T,M=!0,N){M=hc(S,M),await gc(g,q,S,P,T,M);try{let R=await yx.read(g,q,S);await kc(g,q,S,R)}catch(R){S.warn("Could not generate defines.ts:",R)}let z={[S0.Part.dde]:[],[S0.Part.dlo]:[],[S0.Part.dfiles]:[]},v0={[S0.Part.dde]:yc,[S0.Part.dlo]:_c,[S0.Part.dfiles]:wc};try{for(let R of[S0.Part.dde,S0.Part.dlo,S0.Part.dfiles])if(M.includes(R)&&(S.info(`Building ${R.toUpperCase()}...`),await $c(S,R,v0[R],z[R],g,q)))return z}catch(R){throw N?new x(R?.message,z):R}return M.includes(S0.Part.pov)?await Dn.tryBuildPov(g,q,S):S.info("Skipping pov build"),M.includes(S0.Part.blo)?await Dn.tryBuildBlo(g,q,S):S.info("Skipping blo build"),await Sc(g,q,S),await qc(g,q,S),S.done("Project build completed."),z}j.buildAll=A;async function r(g,q,S,P,T,M,N){let z=await Z.read(g,q);return Z.isLibrary(z)?(S.info("Library project detected. Publishing library..."),a(g,q,S,T,P)):(S.info("App project detected. Publishing app..."),t(g,q,S,T,M,N,P))}j.release=r;async function e(g,q,S,P,T,M){let N=await Z.read(g,q),z=`${N.name}-${N.version}.tar.gz`,v0=null;if(Z.isLibrary(N))S.info("Library project detected. Packing library..."),v0=await fF(g,q,S,T,P);else{S.info("App project detected. Packing app...");let k=await lF(g,q,S,T,M,P);v0=await Nc(k)}let R=ke.Utils.joinPath(g,z);v0!==null?(await q.writeFile(R,v0),S.done(`Packaged: ${R.fsPath}`)):S.error(`Could not create archive: ${R.fsPath}`)}j.pack=e;async function t(g,q,S,P,T,M=null,N){if(!await S0.validateAccess(g,q,P,!1,N))throw new Error("Could not validate access to application");let v0=await lF(g,q,S,P,T,N);await S0.updateProfile(g,q,P,N);let R=await S0.publishTag(g,q,P,v0,N);if(M!==null){let k=await Z.read(g,q);await ux.updateExistingApplicationVersion(P,k.publisher,k.registry?.id,k.version,{allowedBackends:M},N),S.info(`Tag "${R.version}" with phase "${R.phase}" shared with ${[...M].join(";")}!`)}S.done(`Tag "${R.version}" with phase "${R.phase}" published!`)}j.releaseAPM=t;async function a(g,q,S,P,T){let M=await Z.read(g,q),N=await fF(g,q,S,P,T);await ge.publishPackage(P,M,N,T),S.done(`Library "${M.publisher}/${M.name}" with version "${M.version}" published!`)}j.releaseLibrary=a;async function s(g,q,S,P,T,M,N,z=null){if(M==="*"){let H=await Z.read(g,q);M=`${H.name}-${H.version}.tar.gz`,S.info(`Publishing detected archive package "${M}"...`)}let v0=ke.Utils.joinPath(g,M);if(!await q.stat(v0))throw new Error(`Archive package not found: ${v0.fsPath}`);let R=await q.readFile(v0),k=await Ic(R),{publisher:O,registry:V,version:X}=k;Z.isLibrary(k)?(await ge.publishPackage(P,k,R,T),S.done(`Library "${O}/${k.name}" with version "${k.version}" published!`)):(await ux.updateApplicationFile(P,O,V.id,X,"app.tar.gz",R,T),await ux.updateExistingApplicationVersion(P,O,V?.id,X,{allowedBackends:z||void 0,phase:N||void 0},T),S.info(`Tag "${X}" with phase "${N}" shared with ${[...z||""].join(";")}!`),S.done(`Tag "${X}" with phase "${N}" published!`))}j.publishArchive=s;async function l(g,q,S){let P;try{P=await q.readFile(ke.Utils.joinPath(g,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(vF(P)===o0.readme(S))throw new Error('"README.md" matches the default template. Please write a brief project description.');return P}j.getReadmeFile=l;async function E(g,q){let S;try{S=await q.readFile(ke.Utils.joinPath(g,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(vF(S)===o0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return S}j.getChangelogFile=E;async function D(g,q,S,P){let T=await Z.read(g,q),{name:M,publisher:N,description:z}=T,v0=Z.validateProjectName(M,Z.isLibrary(T));if(v0)throw new Error(`name: ${v0}`);let R=Z.validateDescription(z);if(R)throw new Error(`description: ${R}`);let k=Z.validatePublisherId(N)||await Z.validatePublisherOnline(S,N,P);if(k)throw new Error(`publisher: ${k}`);if(!Z.isLibrary(T)&&(await Z.validateApplicationIcon(g,q,T),Z.validateEngineSettings(T),Z.isApp(T)&&await Z.isApmPartEnabled(g,q,S0.Part.dlo,T)&&(!T.dpid||!Object.values(Z.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}j.validatePublishSettings=D;async function b(g,q){let S=Us.ungzip(g),P=await wt.TarReader.load(S),T={};for(let M of P.fileInfos)q.includes(M.name)&&(T[M.name]=P.getFileBlob(M.name));return T}j.readFilesFromTarGz=b})(Nx||={});function hc(x,A){let r=Object.values(S0.Part);return A===!0?(x.info("Building project..."),r):A===!1?[]:A}async function gc(x,A,r,e,t,a){await Bx.validateMinimumBackendVersion(x,A,r),a.includes(S0.Part.dde)&&await SA.fetchPreviousHistoryJson(x,A,r,e,t)}async function kc(x,A,r,e){e.defaultsOnly?(await yx.exportDefinesTs(x,A,e.defaultsOnly),r.log("Generated",o0.filePaths.dist.definesTs,"(defaults only)"),await yx.exportDefinesTs(x,A,e,o0.filePaths.dist.definesAppTs),r.log("Generated",o0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await yx.exportDefinesTs(x,A,e),r.log("Generated",o0.filePaths.dist.definesTs))}async function yc(x,A,r){let e=await SA.compileDDE(x,A,r);if(e.ddeJSON){await SA.exportMyDatanetXML(x,A,r,e.ddeJSON);let t=await Z.read(x,A);Z.isLibrary(t)||await SA.exportHistoryJson(x,A,r,e.ddeJSON),await SA.exportOpenApi(x,A,r,e.ddeJSON),await Z.isApmPartEnabled(x,A,S0.Part.dlo,t)&&(await SA.exportAutoDloFiles(x,A,r,e.ddeJSON),await yt.exportDloConfig(x,A,r))}return e.diagnostics}async function _c(x,A,r){let e=new Qe(x,A,r),{diagnostics:t}=await e.compile(x,A);return t}async function wc(x,A,r){return await _t.process(x,A,r)}async function Sc(x,A,r){let e=await Z.read(x,A);Z.isLibrary(e)&&await Ze.normalizeLibraryParts(x,A,e,r)}async function qc(x,A,r){let e=ke.Utils.joinPath(x,o0.fileNames.reportTemplate);if(await A.stat(e)){let t=ke.Utils.joinPath(x,o0.filePaths.dist.reportTemplate);await A.copy(e,t),r.log(`Copied "${o0.fileNames.reportTemplate}" to dist folder.`)}}function Tc(x,A,r){A!==S0.Part.dlo&&Pc(x,r);let e=r.some(t=>t.level==="error");if(e){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return e}async function $c(x,A,r,e,t,a){let s=await r(t,a,x);return e.push(...s),Tc(x,A,s)}function Pc(x,A){A.forEach(r=>{let e=r.startCharacter?`:${r.startCharacter+1}`:"",t=`${r.file.path}:${r.line+1}${e} - ${r.message}`;r.level==="error"?x.error(t):r.level==="warning"?x.warn(t):x.log(t)})}async function fF(x,A,r,e,t){let a=await Z.read(x,A);return await Z.validateBasicManifest(x,A,a),await Nx.buildAll(x,A,r,t,e),await ge.createArchive(x,A)}async function lF(x,A,r,e,t,a){if(!Object.values(S0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await Z.validateBasicManifest(x,A,null),await Nx.buildAll(x,A,r,a,e),await S0.createTag(x,A,t)}async function Nc(x){let A=new wt.TarWriter;for(let[e,t]of x.entries())if(e==="tag"){let a=t;A.addFile(e,a)}else{let a=t;A.addFile(e,await a.arrayBuffer())}let r=await A.write();return Us.gzip(await r.arrayBuffer())}async function Ic(x){let A=await Mc(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function Mc(x,A){let r=Us.ungzip(x),e=await wt.TarReader.load(r);for(let t of e.fileInfos)if(A.includes(t.name))return e.getFileBlob(t.name);return null}var Lc=T0.bufferToBase64;var S0;(b=>{let x;(N=>(N.alpha="alpha",N.beta="beta",N.rc="rc",N.release="release",N.stage="stage",N.passive="passive",N.withdrawn="withdrawn"))(x=b.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=b.Part||={});function r(j){let{description:g,name:q,pov:S,engines:P,blo:T,publisher:M,type:N}=j,z=N||Z.ProjectTypes.app,v0={name:q,abstract:g,author:M||"",pov_location:Z.PovLocation.embedded,pov_details_lowlevel:!1,required_be:P?.backend,required_hwfw:P?.hwfw?.join(";"),required_productcode:P?.productId?.join(";"),blo_level:T?.accessLevel||Z.BloAccessLevel.restricted,pip_id:""};return S&&S.details&&(v0.pov_location=Z.PovLocation.pure,v0.pov_details_lowlevel=!!S.details.lowLevel),z==="addon"&&(v0.required_hwfw=void 0,v0.required_productcode=void 0,v0.addon_max_sources=1,v0.addon_max_per_site=j.maxInstancesPerSite),v0}b.createBaseTagHeader=r;async function e(j,g,q){let S=await Z.read(j,g),P=r(S),T={version:S.version,...P,phase:q};return await a(j,g,S,T)}b.createTag=e;async function t(j,g){let q=await Z.read(j,g),P={...r(q),blo_autostart:!1};return a(j,g,q,P)}b.createDevTag=t;async function a(j,g,q,S){let P=new FormData;P.append("tag",JSON.stringify(S)),P.append(`src/${Z.fileName}`,new Blob([await Z.readAsBlob(j,g)]));let T=new Blob([await g.readFile(Sr.Utils.joinPath(j,o0.filePaths.dist.ddeXmlPath))]);if(P.append("bin/dde/xml",T),q.icon){let N=await g.readFile(Sr.Utils.joinPath(j,q.icon)),z=Lc(N);P.append("previews/00.png",new Blob([`data:image/png;base64,${z}`]))}if(Object.hasOwn(S,"phase")){let N=await Nx.getReadmeFile(j,g,S.name),z=await Nx.getChangelogFile(j,g);P.append("previews/README.md",new Blob([N])),P.append("previews/CHANGELOG.md",new Blob([z]))}if(await Z.isApmPartEnabled(j,g,"dlo")){let N=new Blob([await g.readFile(Sr.Utils.joinPath(j,o0.filePaths.dist.mainAmxPath))]);P.append("bin/dlo/amx",N)}if(await Z.isApmPartEnabled(j,g,"pov",q)){await EF(j,g,P,o0.filePaths.dist.povDetailsPath,"bin/pov/details");let N=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');P.append("bin/pov/list/index.html",new Blob([N]))}let M=await g.findFiles(j,`${o0.filePaths.dist.dfilesPath}/*`);for(let N of M){let z=new Blob([await g.readFile(N)]);P.append(`bin/dfiles/${Sr.Utils.basename(N)}`,z)}return await Z.isApmPartEnabled(j,g,"blo",q)&&await EF(j,g,P,o0.filePaths.dist.bloPath,"bin/blo"),await Rc(j,g,P),P}b.createBuffer=a;async function s(j,g,q,S,P){let T=await Z.read(j,g);S||await Nx.validatePublishSettings(j,g,q,P);let{registry:M}=T,N=M?.id;if(!N&&!S&&(N=await l(j,g,q,T,P)),N){let{publisher:z}=T;if(!z)return null;try{return{id:N,...await ux.getExistingApplication(q,z,N,P)}}catch(v0){if(v0?.message==="Could not find given application")return N=await l(j,g,q,T,P),{id:N,...await ux.getExistingApplication(q,z,N,P)}}}return null}b.validateAccess=s;async function l(j,g,q,S,P){let T="myDatanet",{publisher:M,name:N,description:z,registry:v0}=S,R={id:v0?.id,type:S.type||Z.ProjectTypes.app,name:N,targetSystem:T,description:z||"",allowedBackends:null};Z.isAddon(S)&&(R.allowedApplications=null);let k=await ux.createNewApplication(q,M,R,P);if(!k)throw new Error("Failed to initialize application");return S.registry={id:k},await Z.write(j,g,S),k}b.registerNew=l;async function E(j,g,q,S){let{name:P,publisher:T,description:M,registry:N}=await Z.read(j,g),z=N?.id;await ux.updateExistingApplication(q,T,z,{description:M,name:P,targetSystem:"myDatanet"},S)}b.updateProfile=E;async function D(j,g,q,S,P){let{publisher:T,registry:M,version:N}=await Z.read(j,g);return await ux.publishApplicationVersion(q,T,M?.id,N,S,P)}b.publishTag=D})(S0||={});async function EF(x,A,r,e,t){let a=await A.findFiles(x,`${e}/**`);for(let s of a){let l=Sr.Utils.joinPath(x,e),E=s.path.substring(l.path.length+1),D=new Blob([await A.readFile(Sr.Utils.joinPath(x,`${e}/${E}`))]);r.append(`${t}/${E}`,D)}}async function Rc(x,A,r){let e=Sr.Utils.joinPath(x,o0.filePaths.dist.reportTemplate);if(await A.stat(e)){let a=new Blob([await A.readFile(e)]);r.append("bin/pov/mdn_report_template.json",a)}let t=Sr.Utils.joinPath(x,o0.filePaths.dist.historyJson);await A.stat(t)&&r.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var uF=require("deepmerge-ts"),Oc=T0.isNumeric,BF="52v007",cF="53v001",Gc="54v001",Uc="56v001",qA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,uF.deepmerge)(structuredClone(this._manifest),qA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},Z;(f0=>{let x=T0.convertBlobToString;f0.fileName="studio.json";let r;(L0=>(L0.m22x="m22x",L0.m23x="m23x",L0.nrf91="nrf91",L0.m2blegw="m2blegw",L0.m2easyv3="m2easyv3",L0.m2easyiot="m2easyiot"))(r=f0.DeviceProfiles||={});let e;(b0=>(b0.app="app",b0.library="library",b0.addon="addon",b0.analytics="analytics"))(e=f0.ProjectTypes||={});let t;(E0=>(E0.restricted="restricted",E0.global="global"))(t=f0.BloAccessLevel||={});let a;(E0=>(E0.embedded="$embedded",E0.pure="$pure"))(a=f0.PovLocation||={});function s(U){qA.overwrites=U}f0.setOverwrites=s;function l(){qA.overwrites=null}f0.clearOverwrites=l;async function E(U,F0){let E0=xt.Utils.joinPath(U,f0.fileName),p0=await F0.stat(E0);if(qA.manifest===null||E0?.fsPath!==qA.stat?.path.fsPath||p0?.ctime!==qA.stat?.ctime||p0?.mtime!==qA.stat?.mtime||p0?.size!==qA.stat?.size){let b0=await F0.readFile(E0),N0=x(b0);qA.manifest=JSON.parse(N0),qA.stat={...p0,path:E0}}return qA.manifest}f0.read=E;async function D(U,F0){return await F0.readFile(xt.Utils.joinPath(U,f0.fileName))}f0.readAsBlob=D;async function b(U,F0){let E0=xt.Utils.joinPath(U,f0.fileName),p0=await F0.readFile(E0),b0=x(p0);return JSON.parse(b0)}f0.readRaw=b;async function j(U,F0,E0){return qA.clear(),Xc(E0),F0.writeFile(xt.Utils.joinPath(U,f0.fileName),JSON.stringify(E0,null," "))}f0.write=j;function g(U){return U.library!==void 0?U.library:U.type==="library"}f0.isLibrary=g;function q(U){return U.type==="addon"}f0.isAddon=q;function S(U){return U.type===void 0&&!g(U)?!0:U.type==="app"}f0.isApp=S;function P(U){return U.type===void 0?!0:U.type==="app"}f0.isIotApp=P;function T(U){return U.type==="analytics"}f0.isAnalytics=T;async function M(U,F0,E0){E0||(E0=await E(U,F0)),Wc(E0),Hc(E0),Kc(E0),Vc(E0)}f0.validateBasicManifest=M;function N(U){let F0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let p0=["-","_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return F0}else return F0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}f0.validateLibraryName=N;function z(U,F0){if(F0)return N(U);{let E0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return E0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let b0=["-","_"," "];return b0.includes(U[0])||b0.includes(U[U.length-1])?E0:null}}f0.validateProjectName=z;function v0(U){return U.length<5?"The description must have at least 5 characters.":null}f0.validateDescription=v0;function R(U){if(!U)return"No publisher set yet";let F0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let p0=["_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return F0}else return F0;return null}f0.validatePublisherId=R;async function k(U,F0,E0){return await ux.getPublisher(U,F0,E0)?null:`Publisher '${F0}' does not exist.`}f0.validatePublisherOnline=k;let O=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function V(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let E0 of F0)if(!E0.match(O))return`Domain "${E0}" is invalid`}else if(!U?.match(O)&&U!=="*")return'Invalid value for "allowedBackends"';return null}f0.validateRegistryAllowedBackends=V;let X=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let E0 of F0)if(!E0.match(X))return`Application id "${E0}" is invalid`}else if(!U?.match(X)&&U!=="*")return'Invalid value for "allowedApplications"';return null}f0.validateRegistryAllowedApplications=H;async function W(U,F0,E0){let p0=E0.icon;if(!p0)throw new Error("App icon is required for publishing an application!");let b0=xt.Utils.joinPath(U,p0);if(!await F0.stat(b0))throw new Error(`Could not load icon "${p0}"`);let L0=await F0.readFile(b0),cx=(0,CF.imageDimensionsFromData)(L0);if(!cx)throw new Error("App icon could not be validated!");if(cx?.width!==cx?.height)throw new Error("App icon has to be a square!");if(cx.width>512||cx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,dF.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}f0.validateApplicationIcon=W;function n0(U){let{engines:F0}=U;if(F0?.backend&&!F0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');Jc(U),zc(U)}f0.validateEngineSettings=n0;function e0(U,F0){let E0=N0=>{let L0=/^(\d+)v(\d+)$/.exec(N0);return L0?[Number(L0[1]),Number(L0[2])]:null},p0=E0(U),b0=E0(F0);return p0&&b0?p0[0]-b0[0]||p0[1]-b0[1]:U===F0?0:U<F0?-1:1}f0.compareBackendVersion=e0;async function x0(U,F0,E0,p0){p0||(p0=await f0.read(U,F0));let b0=f0.isAddon(p0),N0=f0.isAnalytics(p0);switch(E0){case S0.Part.dlo:return!!p0?.dlo?.mainFile&&!b0&&!N0;case S0.Part.blo:return!!(p0.blo?.buildCommand&&p0.blo?.workingPath);case S0.Part.pov:return!!(p0.pov?.details?.buildCommand&&p0.pov.details.workingPath);case S0.Part.dde:case S0.Part.dfiles:return!0;default:return!1}}f0.isApmPartEnabled=x0})(Z||={});function Hc(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function Kc(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function Jc(x){let{backend:A,productId:r,hwfw:e}=x.engines;if(Z.isAddon(x)&&(r||e))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=BF){if(e&&r)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(r)throw new Error(`"engines.productId" requires "engines.backend" to be "${BF}"`)}function zc(x){if(!Z.isAddon(x)&&!Z.isAnalytics(x))return;let{backend:A}=x.engines,r=Z.isAddon(x)?Gc:Uc;if(!A||A<r)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${r}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function Vc(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(Z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!Z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function Wc(x){if((x.engines?.backend||"00v000")>=cF||Z.isLibrary(x)){if(!DF.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${cF} onwards "version" has to be a semantic version string!"`)}else if(!Oc(x.version))throw new Error('"version" has to be a number!')}function Xc(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var cr=nx(require("semver"));var hF=require("minimatch");var Yc=require("tinytar-fix"),Qc=require("pako"),qr=".studio/libdeps",ye="package.json",Zc="package-lock.json";function Hs(x){let A=x.dlo?.mainFile,r=[{partName:"blo",partDistPath:"blo",workingPath:pF(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:pF(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?xC(A):void 0}],e=[],t=[],a=new Set;for(let s of r){if(s.workingPath!==void 0){if(a.has(s.workingPath)){t.push(s);continue}a.add(s.workingPath)}e.push(s)}return{parts:e,duplicates:t}}function Ks(x,A){for(let r of x)A.warn(`Skipping npm part "${r.partName}" - its working path (${r.workingPath}) is already used by another part in studio.json`)}function bn(x){let A=x.replace(/\\/g,"/").split("/").filter(r=>r!==""&&r!==".");if(!A.some(r=>r===".."))return A.join("/")}function pF(x){if(x)return bn(x)||void 0}function xC(x){let A=bn(x);if(A===void 0)return;let r=A.lastIndexOf("/");return r===-1?void 0:A.slice(0,r)}function bF(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Bx.dependencyIdToName)}async function AC(x,A,r,e){let t=hx.Utils.joinPath(x,qr,e);try{return await A.stat(hx.Utils.joinPath(t,Z.fileName))?await Z.readRaw(t,A):null}catch(a){return r.warn(`Could not read manifest for library "${e}": ${a}`),null}}async function rC(x,A,r,e){let t=new Set,a=bF(e),s=null;for(;a.length>0;){let l=a.shift();if(t.has(l))continue;t.add(l);let E=await AC(x,A,r,l);if(!E)continue;let D=E.engines?.backend;D&&(!s||Z.compareBackendVersion(D,s.backend)>0)&&(s={backend:D,requiredBy:`${E.publisher}/${E.name}`}),a.push(...bF(E))}return s}var Bx;(R=>{async function x(k,O=!1){let V={...k.libraryDependencies||{}};return O||Object.assign(V,k.libraryDevDependencies||{}),V}R.getAll=x;function A(k){return k.split("/")[1]}R.dependencyIdToName=A;function r(k,O){let V=A(O);return hx.Utils.joinPath(k,qr,V)}R.dependencyToPath=r;function e(k){return isNaN(k.split("")[0])?k.substring(1):k}R.rangeToVersion=e;function t(k,O,V){if(!cr.satisfies(O,V,{includePrerelease:!0}))throw new Error(`${k}, version ${O} does not satisfy required constraint ${V}`)}R.satisfiesSemverRange=t;async function a(k,O,V={},X=!1){let H=await Z.read(k,O),W=H.libraryDependencies||{};X&&Object.assign(W,H.libraryDevDependencies);let n0=Object.keys(V);for(let e0 of n0)if(Object.hasOwn(W,e0)){let x0=V[e0],f0=W[e0],U=e(x0),F0=e(f0),E0=cr.compare(U,F0);E0===1?(W[e0]=x0,t(e0,U,f0)):E0===-1&&(W[e0]=f0,t(e0,F0,x0))}else W[e0]=V[e0];return W}R.validateDependencyTree=a;async function s(k,O,V,X,H){let W=e(H),n0=hx.Utils.joinPath(k,qr,X);try{let e0=await Z.read(n0,O);return cr.gte(e0.version,W)&&e0.publisher.toLowerCase()===V.toLowerCase()}catch{return!1}}R.isDependencyInstalled=s;async function l(k,O,V,X){let H=hx.Utils.joinPath(k,qr,X);await O.rm(H).catch(W=>{V.error("removeExisting",W)})}R.removeExisting=l;async function E(k,O,V,X,H){let W=Yc.untar(Qc.ungzip(H));await l(k,O,V,X);for(let n0 of W.values())try{let e0=hx.Utils.joinPath(k,qr,X,n0.name);await O.writeFile(e0,n0.data)}catch(e0){V.error("Extracting lib",e0)}}R.extractLibraryContent=E;async function D(k,O,V,X,H,W,n0,e0=!1){let[x0,f0]=W.split("/");if(n0&&await s(k,O,x0,f0,n0))return;await l(k,O,V,f0);let U=await ux.getLibraryProfile(H,x0,f0,X),F0=n0?U.versions?.find(O0=>cr.eq(O0.name,R.rangeToVersion(n0))):U.versions[0];if(!F0)throw new Error(`Library ${W} with version ${n0} does not exist!`);let E0=F0.files.find(O0=>O0.name==="studio.json"),b0=(await eC(H,E0.downloadUrl)).libraryDependencies||{},N0={...b0};N0[W]=`^${F0.name}`,await a(k,O,N0,e0);for(let[O0,sx]of Object.entries(b0))await D(k,O,V,X,H,O0,sx,e0);let L0=F0.files.find(O0=>O0.name==="library.tar.gz");if(!L0)throw new Error(`Library ${W} has no content!`);let cx=await ux.fetchCustomContent(H,L0.downloadUrl);await E(k,O,V,f0,cx),await z(k,O,V,f0,e0);let eA=await Z.read(k,O),NA=eA.libraryDependencies||{},Ux=eA.libraryDevDependencies||{},U0=e0?Ux:NA;U0[W]=`^${F0.name}`,eA.libraryDependencies=NA,eA.libraryDevDependencies=Ux,await Z.write(k,O,eA)}R.installDependency=D;async function b(k,O,V,X,H){let W=await Z.read(k,O),n0=W.libraryDependencies||{},e0=W.libraryDevDependencies||{},x0=Object.assign(n0,e0);for(let[f0,U]of Object.entries(x0)){let F0=Object.hasOwn(e0,f0);await D(k,O,V,X,H,f0,U,F0)}for(let[f0]of Object.entries(x0)){let U=A(f0),F0=Object.hasOwn(e0,f0);await z(k,O,V,U,F0)}V.done(`Installed ${Object.entries(x0).length} dependencies`)}R.installDependencies=b;async function j(k,O,V,X,H){let W=await Z.read(k,O),n0=W.libraryDependencies||{},e0=W.libraryDevDependencies||{},x0=Object.assign(n0,e0),f0=`${X}/${H}`;delete x0[f0];let U=await tC(k,O,x0);if(!Object.hasOwn(U,f0))await v0(k,O,V,H),await l(k,O,V,H),delete e0[f0],delete n0[f0],await Z.write(k,O,W);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}R.uninstallDependency=j;async function g(k,O){try{let X=(await gF(hx.Utils.joinPath(k,ye),O)).workspaces;if(Array.isArray(X)&&X.every(W=>typeof W=="string")&&X.length>0)return X;let H=X?.packages;return Array.isArray(H)&&H.every(W=>typeof W=="string")&&H.length>0?H:null}catch{return null}}R.readNpmWorkspacePatterns=g;function q(k,O){let V=bn(k);return V===void 0?!1:O.some(X=>{let H=bn(X);return H===void 0?!1:H===V||(0,hF.minimatch)(V,H)})}R.isPathInWorkspaces=q;function S(k,O){if(!O)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let V=[],X=!1;for(let H of k)q(H.workingPath,O)?X=!0:V.push(H.workingPath);return{rootInstall:X,partInstalls:V}}R.planNpmInstalls=S;async function P(k,O,V){let X=await Z.read(k,O),H=new Set([...Object.keys(X.libraryDependencies||{}),...Object.keys(X.libraryDevDependencies||{})].map(A)),W=new Set,n0=[...H];for(;n0.length>0;){let e0=n0.shift();if(W.has(e0))continue;W.add(e0);let x0=hx.Utils.joinPath(k,qr,e0);try{let f0=hx.Utils.joinPath(x0,Z.fileName);if(!await O.stat(f0))continue;let U=await Z.readRaw(x0,O);await Ze.normalizeLibraryParts(x0,O,U,V),n0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(f0){V.warn(`Could not normalize library parts for "${e0}": ${f0}`)}}}R.normalizeInstalledLibraryParts=P;async function T(k,O,V){let X=await Z.read(k,O),H=await rC(k,O,V,X);if(!H)return;let W=X.engines?.backend;if(!W||Z.compareBackendVersion(H.backend,W)>0){let n0=W?`"${W}"`:"none",e0=Z.isLibrary(X)?"library":"application",x0=Z.isLibrary(X)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${e0} "${X.publisher}/${X.name}" declares ${n0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}R.validateMinimumBackendVersion=T;async function M(k,O,V){await P(k,O,V);let X=await Z.read(k,O),{parts:H,duplicates:W}=Hs(X);Ks(W,V);let n0=H.filter(({workingPath:F0})=>!!F0).map(({partName:F0,workingPath:E0})=>({name:F0,workingPath:E0})),e0=[];for(let F0 of n0){let E0=hx.Utils.joinPath(k,F0.workingPath),p0=hx.Utils.joinPath(E0,ye);await O.stat(p0)&&e0.push(F0)}if(e0.length===0)return;let x0=await g(k,O),{rootInstall:f0,partInstalls:U}=S(e0,x0);if(f0){let F0=e0.filter(E0=>!U.includes(E0.workingPath)).map(E0=>E0.workingPath).join(", ");V.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${F0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await pn(k,["install","--no-audit","--no-fund"],V)}for(let F0 of e0){if(!U.includes(F0.workingPath))continue;x0?V.warn(`${F0.workingPath} (${F0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):V.info(`Installing npm dependencies for ${F0.name} (${F0.workingPath})...`);let E0=hx.Utils.joinPath(k,F0.workingPath);await iC(E0,O,V)}}R.installNpmInApmParts=M;async function N(k,O,V,X=!1){let H=await Z.read(k,O),W=await x(H,X),n0=[],e0=o0.filePaths[V].path,x0=V===S0.Part.dlo?"inc":"dfiles";for(let f0 in W){let U=R.dependencyToPath(k,f0),F0=R.dependencyIdToName(f0),E0=hx.Utils.joinPath(U,e0,`${F0}.${x0}`);await O.stat(E0)&&n0.push({name:F0,path:E0})}if(Z.isLibrary(H)){let f0=hx.Utils.joinPath(k,e0,`${H.name}.${x0}`);await O.stat(f0)&&n0.push({name:H.name,path:f0})}return n0}R.getApmPartDependencies=N;async function z(k,O,V,X,H){let W=await Z.read(k,O),{parts:n0,duplicates:e0}=Hs(W);Ks(e0,V);for(let{partName:x0,partDistPath:f0,workingPath:U}of n0){if(!U)continue;let F0=hx.Utils.joinPath(k,qr,X,"dist",...f0.split("/"),ye);if(!await O.stat(F0))continue;let p0=hx.Utils.joinPath(k,U,ye);if(!await O.stat(p0)){V.info(`${U} (${x0}) has no package.json, skipping link`);continue}try{let b0=await jF(k,O,U),N0=H?"devDependencies":"dependencies";b0[N0]=b0[N0]||{};let L0=U.split("/").length,cx=Array(L0).fill("..").join("/");b0[N0][X]=`file:${cx}/${qr}/${X}/dist/${f0}`,await mF(k,O,U,b0),V.info(`Linked ${X} to ${x0} (${U})`)}catch(b0){V.warn(`Could not link ${X} to ${x0}: ${b0}`)}}}R.linkLibraryApmParts=z;async function v0(k,O,V,X){let H=await Z.read(k,O),{parts:W,duplicates:n0}=Hs(H);Ks(n0,V);for(let{partName:e0,workingPath:x0}of W){if(!x0)continue;let f0=hx.Utils.joinPath(k,x0,ye);if(await O.stat(f0))try{let U=await jF(k,O,x0),F0=!1;U.dependencies?.[X]?.startsWith("file:")&&(delete U.dependencies[X],F0=!0),U.devDependencies?.[X]?.startsWith("file:")&&(delete U.devDependencies[X],F0=!0),F0&&(await mF(k,O,x0,U),V.info(`Unlinked ${X} from ${e0}`))}catch(U){V.warn(`Could not unlink ${X} from ${e0}: ${U}`)}}}R.unlinkLibraryApmParts=v0})(Bx||={});async function gF(x,A){let r=await A.readFile(x);return JSON.parse(T0.convertBlobToString(r))}function jF(x,A,r){return gF(hx.Utils.joinPath(x,r,ye),A)}async function mF(x,A,r,e){let t=hx.Utils.joinPath(x,r,ye),a=JSON.stringify(e,null," ")+`
|
|
2785
|
+
`;await A.writeFile(t,a)}async function eC(x,A){return await ux.fetchCustomContent(x,A,!0)}async function tC(x,A,r){let e={};function t(D,b,j,g=!1){let q=e[D],S=Bx.rangeToVersion(j),P=Bx.rangeToVersion(j);(!q||cr.gt(S,P))&&(e[D]={publisherId:b,version:j,installed:g})}let a=Object.entries(r).map(([D,b])=>{let[j,g]=D.split("/");return t(g,j,b,!0),g}),s={};for(let D of a)try{let b=await nC(x,A,D);s[D]=Object.entries(b).map(([j,g])=>{let[q,S]=j.split("/");return t(S,q,g),S}),a.push(...s[D])}catch{let j=e[D];throw new Error(`Please import "${j.publisherId}/${D}" first.`)}let l=[];for(;;){let D=a.filter(b=>l.includes(b)?!1:(s[b]||[]).every(g=>l.includes(g)));if(l.push(...D),a.length===l.length||!D.length)break}let E={};return[...new Set(l)].forEach(D=>{let{version:b,publisherId:j}=e[D],g=sC(j,D,b);E[g.libraryId]=g.libraryVersion}),E}async function nC(x,A,r){let e=hx.Utils.joinPath(x,qr,r);return(await Z.read(e,A))?.libraryDependencies||{}}function sC(x,A,r){return{libraryName:A,publisherId:x,libraryVersion:r[0]==="^"?r:"^"+r,libraryId:`${x}/${A}`}}function pn(x,A,r){let e=wr.resolveNpm();return wr.run(x,{file:e.file,args:[...e.args,...A]},r)}async function iC(x,A,r){let e=hx.Utils.joinPath(x,Zc);if(!await A.stat(e)){r.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await pn(x,["install"],r);return}try{await pn(x,["ci"],r)}catch{r.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await pn(x,["install"],r)}}var kF=nx(require("dotenv")),yF=require("vscode-uri");var aC=".env.local",Js;(A=>{async function x(r,e){let t=yF.Utils.joinPath(r,aC);if(await e.stat(t)){let a=await e.readFile(t);return kF.default.parse(T0.convertBlobToString(a))}return{}}A.read=x})(Js||={});var At=nx(require("chalk")),Tr;(e=>{let x;(b=>(b[b.log=0]="log",b[b.done=1]="done",b[b.info=2]="info",b[b.warning=3]="warning",b[b.error=4]="error",b[b.debug=5]="debug"))(x=e.LogMessageType||={}),e.LOG_PREFIX={1:At.default.bgGreen.black(" DONE "),0:"",2:At.default.bgBlueBright.black(" INFO "),3:At.default.bgYellow.black(" WARNING "),4:At.default.bgRed.black(" ERROR "),5:At.default.bgBlackBright.black(" DEBUG ")};class r{_logHandler;_silent=!1;_debugEnabled=!1;constructor(a=console){this._logHandler=a}_log(a,s,...l){this._silent&&a!==4||(l=[e.LOG_PREFIX[a],s,...l],this._logHandler.log(...l))}set silent(a){this._silent=a}set output(a){this._logHandler=a}log(a,...s){this._log(0,a,...s)}debug(a,...s){this._debugEnabled&&this._log(5,a,...s)}set debugEnabled(a){this._debugEnabled=a}error(a,...s){this._log(4,a,...s)}info(a,...s){this._log(2,a,...s)}warn(a,...s){this._log(3,a,...s)}done(a,...s){this._log(1,a,...s)}}e.Logger=r})(Tr||={});var Tf=require("node:child_process");var $f=require("node:fs"),Pf=nx(require("node:path")),ot=require("vscode-uri");var sf=require("node:events"),aa=require("vscode-uri"),Dx=nx(ne());var pA=nx(ne());var ta=nx(ne()),Jv=2e3;function S7(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function q7(x,A){let r=x.device;try{return r?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Wn=class{interface="usb";#A=new Set;#r;#e;#s;#t;#x=!1;#n;constructor(A,r){this.#r=A;let t=A.configuration.interfaces[r].alternate.endpoints;this.#e=t.find(a=>a.direction==="in"),this.#s=t.find(a=>a.direction==="out"),this.#t=q7(A,r)}async write(A){await this.#r.transferOut(this.#s.endpointNumber,A)}onData(A){let r={cb:A};return this.#A.add(r),this.#x||this.#i(),()=>{this.#A.delete(r)}}#i(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",r=>{if(r.byteLength===0)return;let e=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);for(let t of this.#A)t.cb(e)}),A.on("error",()=>{}),A.startPoll(1,this.#e.packetSize)}async#a(){for(;this.#x&&this.#r.opened;)try{let A=await this.#r.transferIn(this.#e.endpointNumber,this.#e.packetSize);if(A.data&&A.data.byteLength>0)for(let r of this.#A)r.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(r=>{let e=setTimeout(r,Jv);A.stopPoll(()=>{clearTimeout(e),r()})}):this.#n&&await Promise.race([this.#n,S7(Jv)])}},Xn=class extends Wn{constructor(A){super(A,ta.USB_CONFIGURATION.utoInterface)}},Yn=class extends Wn{constructor(A){super(A,ta.USB_CONFIGURATION.debugInterface)}};var T7=9540,na;function $7(){if(!na){let{WebUSB:x}=require("usb");na=new x({allowedDevices:[{vendorId:T7}]})}return na}async function P7(x,A){A.info(`Searching for device with serial number: ${x}`);let r=await $7().getDevices();for(let e of r)if((e.serialNumber||e.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${e.productName}`),e;return null}function sa(x){return`Device not found with serial number: ${x}`}var N7=500;function I7(x){if(x instanceof Qn)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(sa(""))}var Qn=class extends Error{constructor(A,r){super(`${A}: ${r instanceof Error?r.message:String(r)}`),this.name="TransientUsbOpenError"}};function M7(x,A){try{return{uto:new Xn(x),debug:A?new Yn(x):void 0}}catch(r){throw new Qn("Device descriptors not ready",r)}}function L7(x){return async(A,r=!0)=>{let e=await P7(A,x);if(!e)throw new Error(sa(A));try{await e.open(),await e.selectConfiguration(pA.USB_CONFIGURATION.configurationNumber),await e.claimInterface(pA.USB_CONFIGURATION.utoInterface),r&&await e.claimInterface(pA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:a}=M7(e,r);return{uto:t,debug:a,async close(){await t.stop(),await a?.stop(),e.opened&&(await e.releaseInterface(pA.USB_CONFIGURATION.utoInterface).catch(()=>{}),r&&await e.releaseInterface(pA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await e.close().catch(()=>{}))}}}catch(t){throw e.opened&&await e.close().catch(()=>{}),t}}}function R7(x){return new Promise(A=>setTimeout(A,x))}async function O7(x,A,r,e){let t=Date.now()+e;for(;;)try{return await x(A,r)}catch(a){if(!I7(a)||Date.now()>=t)throw a;await R7(N7)}}function Me(x){return{debug:(A,...r)=>x.debug(A,...r),info:(A,...r)=>x.debug(A,...r),warn:(A,...r)=>x.warn(A,...r),error:(A,...r)=>x.error(A,...r)}}async function ia(x,A={}){let r=A.logger??new Tr.Logger,e=A.transportFactory??L7(r),t=A.needDebug!==!1,a=await O7(e,x,t,A.retryMs??0),s=t?a.debug:void 0,l=Me(r),E=s?new pA.AtCommandHandler(s,l):void 0,D=new pA.UtoMaster(a.uto,l);return{utoMaster:D,atHandler:E,transports:a,serial:x,close:async()=>{try{await D.dispose(E)}catch{}E?.dispose(),await a.close()}}}async function zv(x,A,r,e,t=!1,a=0,s){if(!await r.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let E=await r.readFile(A),D;try{D=await ia(x,{logger:e,debug:t,needDebug:!1,retryMs:a,transportFactory:s});let{utoMaster:b}=D;if(t){b.on("mdnCom",g=>{e.debug("mdnCom",g)}),b.on("mdnComError",g=>{e.debug("mdnComError",g)});let j=-1;b.on("installing",g=>{g&&g!==j&&(j=g,e.info(`Upload progress: ${g}%`))})}return await b.init(),await b.requestDeviceInfo(),e.info("Device connected, starting upload..."),await b.sendFile(pA.UtoFileType.pawn,new Uint8Array(E.buffer,E.byteOffset,E.length)),e.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(b){let j=b instanceof Error?b.message:String(b);return{success:!1,message:j===sa(x)?j:`Upload failed: ${j}`}}finally{await D?.close()}}var Vv=require("vscode-uri"),Zn=nx(ne());var xs=class x{constructor(A,r,e,t,a){this.fs=e;this.persist=t;this.logger=a;this.storage=A,this.file=r}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,r,e={}){let t=Vv.Utils.joinPath(A,o0.filePaths.studio.dev.mirror),a=new Zn.MemoryStorage;if(e.persist&&await r.stat(t))try{let s=new TextDecoder().decode(await r.readFile(t));a=Zn.MemoryStorage.fromJSON(JSON.parse(s))}catch(s){e.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${s instanceof Error?s.message:s}`),a=new Zn.MemoryStorage}return new x(a,t,r,e.persist===!0,e.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(r){this.logger?.warn(`Could not write dev mirror snapshot: ${r instanceof Error?r.message:r}`)}}};var Yv=require("node:events"),As=require("node:fs/promises"),Qv=require("node:path"),Zv=nx(require("iconv-lite")),Le=nx(ne());var G7=5e3,Wv=500;function Xv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function U7(x){let A=x.level===Le.DebugLogLevel.info?"":`${Le.DebugLogLevel[x.level]}: `,r=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${r}`.trim()}function H7(x){if(x.length===0)return!1;let A=0,r=0;for(let e of x){r++;let t=e.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/r>.8}var at=class extends Yv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??G7,this.logFile=A.logFile,this.logger=A.logger}push(A,r,e){let t={seq:++this.seq,ts:Date.now(),source:A,text:r};return e&&(t.raw=Buffer.from(e).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let r=this.logFile;r&&(this.logDirReady??=(0,As.mkdir)((0,Qv.dirname)(r),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,As.appendFile)(r,`${JSON.stringify(A)}
|
|
2786
|
+
`,"utf8")}).catch(e=>{this.logger?.warn(`Could not append to log file: ${e instanceof Error?e.message:e}`)}))}since(A=0,r=Wv){let e=r>0?r:Wv;return this.buffer.filter(t=>t.seq>A).slice(-e)}get lastSeq(){return this.seq}attachUtoMaster(A){let r=e=>{if(e.wTagFull!==Le.UtoTag.LOG||!e.data)return;let t=new Uint8Array(e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",r),this.disposers.push(()=>A.off("utoFrame",r))}attachAtHandler(A){let r=new Le.DebugMaster(A,Me(this.logger??new Tr.Logger));r.on("message",e=>{let t=U7(e);t&&this.push("at",t)}),this.disposers.push(()=>r.dispose())}pushDecoded(A,r){let t=[Xv(Zv.default.decode(Buffer.from(r),"win1252")),Xv(Buffer.from(r).toString("utf8"))].find(H7);if(t){this.push(A,t);return}let a=Buffer.from(r.subarray(0,32)).toString("hex");this.push(A,`<${r.length} bytes> ${a}${r.length>32?"\u2026":""}`,r)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Af=require("node:events"),QA=nx(ne()),K7=1e3,J7=1e4,z7=200,xf=new Set([QA.UtoTag.HISTDATA_RAW,QA.UtoTag.LOG,QA.UtoTag.ALERTS]),rs=class extends Af.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let r of A.model.containers){let e=(0,QA.resolveTagForContainer)(r);e!==null&&this.containerByTag.set(e,r)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((r,e)=>{this.tagMap.set(r.wTag,{index:e,sTag:r.sTag,historic:r.flags.historic}),(this.containerByTag.has(r.wTag)||xf.has(r.wTag))&&this.relevantTags.add(r.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[r,e]of this.tagMap)e.index<A.stamps.length&&this.deviceStamps.set(r,A.stamps[e.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:K7,J7),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let r=[];for(let e of this.relevantTags){let t=await this.pullIfAdvanced(e,A);t&&r.push(t)}if(r.length>0){this.lastChangeAt=Date.now();for(let e of r)this.emit("container-changed",e)}return r}async pullIfAdvanced(A,r){let e=this.tagMap.get(A);if(!e||e.index>=r.length)return null;let t=r[e.index],a=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let s=await this.mirrorStamp(A);return(a===void 0?t>s:t!==a)?this.pull(A,e,s,t):null}async pullTags(A){let r=[];for(let e of A){let t=this.tagMap.get(e)??{index:-1,sTag:`0x${e.toString(16)}`,historic:!1},a=await this.mirrorStamp(e),s=await this.pull(e,t,t.historic?a:0,this.deviceStamp(e)??0);s&&(r.push(e),this.emit("container-changed",s))}return r}async mirrorStamp(A){let r=await this.opts.storage.getLatestStampForTag(A);return r?(0,QA.dbStampToStamp40)(r):0}async pull(A,r,e,t){return r.historic||xf.has(A)?this.pullHistoric(A,e,t):this.pullSingle(A,t)}async pullSingle(A,r){let e=await this.utoMaster.requestUto(A,0);if(!e)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,QA.stamp40ToDbHex)(e.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:e.data?V7(e.data):null}),this.describeChange(A,e.stamp||r)}async pullHistoric(A,r,e){let t=await this.opts.storage.getRowForTag(A),a=0,s=r,l=async E=>{let D=E.filter(b=>b.stamp40>r).map(b=>(s=Math.max(s,b.stamp40),{tag:A,stamp:(0,QA.stamp40ToDbHex)(b.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:b.data}));await this.opts.storage.insertHistoricRows(D),a+=D.length};return await this.utoMaster.requestHistoricUtos(A,r,void 0,void 0,z7,l),a===0?null:this.describeChange(A,s||e)}async describeChange(A,r){let e=this.containerByTag.get(A);if(!e)return{tag:A,container:null,stamp:r};let t=null;try{t=await this.opts.mapper.readContainer(e.name)}catch{}return{tag:A,container:e.name,alias:e.alias,stamp:r,decoded:t}}};function V7(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Ut=(l=>(l[l.Success=0]="Success",l[l.BuildFailed=1]="BuildFailed",l[l.DeviceNotFound=2]="DeviceNotFound",l[l.UsbFailed=3]="UsbFailed",l[l.ModelMissing=7]="ModelMissing",l[l.UnknownContainer=8]="UnknownContainer",l[l.WriteForbidden=9]="WriteForbidden",l))(Ut||{}),kx=class extends Error{constructor(r,e){super(r);this.exitCode=e;this.name="DevError"}exitCode},W7=2e3,X7=3e3,Y7=3e4,Q7=1e4,Z7=3e4,x6=1e3,oa="dev",rf=`/api/1/sites/${oa}`,ef="local",es="Device not connected",tf="device_id",Fa=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,r){this.depth++;let e=this.tail,t=()=>{};this.tail=new Promise(a=>{t=a});try{await A6(e,r)}catch(a){throw this.depth--,e.then(t,t),a}try{return await A()}finally{this.depth--,t()}}};function A6(x,A){return new Promise((r,e)=>{let t=setTimeout(()=>e(new kx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),r()})})}var Re=class extends sf.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new Fa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??Dx.systemTimeSource,this.logStream=new at({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",r=>this.emit("log",r))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new kx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new kx("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new kx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await xs.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new Dx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new kx(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=aa.Utils.joinPath(this.opts.cwd,o0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new kx(`No DDE model at ${o0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let r=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,Dx.parseDde)(r)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await ia(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let a=t instanceof Error?t.message:String(t);throw new kx(`Could not open device ${this.opts.serial}: ${a}`,/not found/i.test(a)?2:3)}let{utoMaster:A,atHandler:r}=this.device;if(!r)throw new kx(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(r),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(tf)===null&&await this.storage.setMetadataValue(tf,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new kx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let e=Me(this.logger);this.stateManager=new Dx.Rm2mStateManager(r,e),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new Dx.LocalDataManager(r,e),this.offlineSync=new Dx.OfflineSyncManager(A,this.storage,e)}async startPoller(){this.poller=new rs({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??W7,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new kx(es,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new kx(es,3);return this.device.atHandler}buildApiHandler(){let A={container:async(e,t,a)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(Dx.UtoCommand.DATA,e,t,a))},adHocChangeRequest:async(e,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(e,t)),backfill:async()=>(await this.sync(),"ready")},r={siteUid:oa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,Dx.createSiteInfoFromDde)(this.ddeModel,{siteUid:oa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:ef}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,Dx.createLocalApiHandler)(r)}buildBlueprint(){let A={};for(let r of this.ddeModel.containers){let e={};for(let t of r.fields){let a=t.alias??t.name;e[a.toLowerCase()]={alias:a}}A[r.name.toLowerCase()]=e}return A}async handleApi(A){if(!this.apiHandler)throw new kx("Session not started",7);let r=this.writtenTag(A),e=await this.apiHandler(A);if(r===null||e.status>=400)return e;let t=await this.mirrorStamp(r);return await this.awaitDeviceStamp(r,t)||(e.headers={...e.headers,"x-mt-mirror":"stale"}),e}writtenTag(A){let r=A.method.toUpperCase();if(r!=="PUT"&&r!=="POST")return null;let[e,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let a=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(e);if(!a)return null;let s=(0,Dx.resolveTagInModel)(this.ddeModel,decodeURIComponent(a[1]));return s===null||!(0,Dx.isDevicePushableTag)(s)||this.poller?.knowsTag(s)===!1?null:s}async awaitDeviceStamp(A,r){let e=this.opts.waitMs??X7,t=this.poller;if(e<=0||!t)return!0;let a=Date.now()+e;for(;;){let l=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(l!==null&&l>=r)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=a)return!1;await nf(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await Z.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await Nx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??yx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof Nx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let r=aa.Utils.joinPath(this.opts.cwd,A??o0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??zv)(this.opts.serial,r,this.opts.fs,this.logger,this.opts.debug,Q7,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+Z7;for(let r=0;;r++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(e){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(e);return}r===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await nf(x6)}}reportReconnectFailure(A){let r=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${r}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(r))}async sync(A){let r=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(a=>a.outcome==="upload").map(a=>a.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let e={tags:r,at:this.lastSyncAt};return this.emit("sync",e),e}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new kx(es,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new kx(es,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:ef,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,Dx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},r=[];for(let e of this.configContainers()){let t=e.alias??e.name;r.push(t);let a=await this.handleApi({path:`${rf}/containers/${encodeURIComponent(e.name)}`,method:"GET"});A[t]=a.status<400&&a.body?JSON.parse(a.body):{}}return{configs:A,order:r}}async applyConfigs(A){let r={};for(let[e,t]of Object.entries(A)){let a=this.ddeModel.byNameOrAlias(e);if(!a||a.kind!=="config"){r[e]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${e}"`};continue}let s=await this.handleApi({path:`${rf}/containers/${encodeURIComponent(a.name)}`,method:"PUT",body:JSON.stringify(t)});r[e]=s.status>=400?{ok:!1,err:r6(s.body)}:s.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return r}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let r=await this.storage.getLatestStampForTag(A);return r?(0,Dx.dbStampToStamp40)(r):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??Y7)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function nf(x){return new Promise(A=>setTimeout(A,x))}function r6(x){try{return JSON.parse(x).err??x}catch{return x}}var lf=nx(require("node:http")),Ef=require("vscode-uri"),Bf=nx(require("yaml"));var cf=["log","state","sync","build","uto","container-changed","error"],e6=15e3,af=4*1024*1024,t6="127.0.0.1",n6=8765,Cf="no-store",df="E_NOT_FOUND",of="E_BAD_REQUEST",s6=2e3,i6=20;function Oe(x,A){return JSON.stringify({err:`${x} ${A}`})}function ur(x,A,r,e={}){x.writeHead(A,{"content-type":"application/json","cache-control":Cf,...e}),x.end(r)}function a6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function o6(x,A){if(!(a6(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function F6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function v6(x,A){let r=x.headers.origin;typeof r=="string"&&F6(r)&&(A.setHeader("access-control-allow-origin",r),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function f6(x,A,r){if(!A)return!0;let e=x.headers.authorization,t=typeof e=="string"?e.replace(/^Bearer\s+/i,"").trim():(r??"").trim();if(t==="")return!1;let a=process.env.MYDATANET_TOKEN;return t===A||a!==void 0&&a!==""&&t===a}var se=class extends Error{constructor(r,e,t){super(t);this.status=r;this.code=e}status;code};async function Df(x){let A=[],r=0;for await(let e of x){let t=e;if(r+=t.length,r>af)throw x.pause(),new se(413,"E_TOO_LARGE",`request body exceeds ${af} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function uf(x){return x!=="GET"&&x!=="HEAD"}function Ff(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new se(400,of,"malformed JSON body")}if(typeof A!="object"||A===null)throw new se(400,of,"JSON body must be an object");return A}function vf(x,A){let r=x[A];return typeof r=="string"&&r.length>0?r:void 0}function l6(x,A){let r=x[A];if(!Array.isArray(r))return;let e=r.map(Number).filter(t=>Number.isFinite(t));return e.length>0?e:void 0}function ff(x,A,r){let e=Number.parseInt(x.get(A)??"",10);return Number.isFinite(e)?e:r}var va=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2774
2787
|
|
|
2775
|
-
`)
|
|
2788
|
+
`),e6),this.heartbeat.unref?.()}broadcast(A,r){let e=`event: ${A}
|
|
2776
2789
|
data: ${JSON.stringify(r)}
|
|
2777
2790
|
|
|
2778
|
-
`;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,e)}writeAll(A){for(let r of this.clients)this.write(r,A)}write(A,r){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(r)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=
|
|
2791
|
+
`;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,e)}writeAll(A){for(let r of this.clients)this.write(r,A)}write(A,r){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(r)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=i6&&(this.clients.delete(A),A.res.destroy())}subscribe(A,r,e){let t=new URLSearchParams(e).get("types"),a=t?new Set(t.split(",").map(l=>l.trim()).filter(l=>cf.includes(l))):null;r.writeHead(200,{"content-type":"text/event-stream","cache-control":Cf,connection:"keep-alive"}),r.write(`: connected
|
|
2779
2792
|
|
|
2780
|
-
`);let s={res:r,types:a,stalled:0};this.clients.add(s),A.on("close",()=>this.clients.delete(s)),r.on("close",()=>this.clients.delete(s)),r.on("error",()=>this.clients.delete(s))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function J7(x,A,r,e){let t=A.method??"GET",a={path:e,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([l,B])=>[l,Array.isArray(B)?B.join(","):B??""])),body:vf(t)?await Ff(A):null},s=await x.handleApi(a);ur(r,s.status,s.body,s.headers)}async function K7(x,A,r,e){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Af(e,"file"));case"POST /dev/sync":return t.sync(H7(e,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(rf(r,"since",0),rf(r,"limit",500))};case"POST /dev/at":return z7(t,Af(e,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return Q7(x);case"GET /dev/configs":return t.configs();default:return}}async function z7(x,A){if(!A)throw new se(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function V7(x,A,r,e){let[t,a=""]=e.split("?"),s=A.method??"GET",l=vf(s)?await Ff(A):"";try{if(s==="PUT"&&t==="/dev/configs"){let D=await x.session.applyConfigs(xf(l)),p=Object.values(D).every(j=>j.ok);ur(r,p?200:400,JSON.stringify({results:D}));return}let B=await K7(x,`${s} ${t}`,new URLSearchParams(a),xf(l));if(B===void 0){ur(r,404,Oe(of,`no route for ${s} ${t}`));return}ur(r,200,JSON.stringify(B))}catch(B){if(B instanceof se){ur(r,B.status,Oe(B.code,B.message));return}ur(r,500,Oe("E_DEV",B instanceof Error?B.message:String(B)))}}async function W7(x,A,r,e){if(G7(r,e),r.method==="OPTIONS"){e.writeHead(204),e.end();return}let t=r.url??"/",a=t.split("?")[1]??"",s=t==="/events"||t.startsWith("/events?"),l=s?new URLSearchParams(a).get("token")??void 0:void 0;if(!U7(r,x.token,l)){ur(e,401,Oe("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await J7(x.session,r,e,t):s?A.subscribe(r,e,a):t.startsWith("/dev/")?await V7(x,r,e,t):ur(e,404,Oe(of,`no route for ${t}`))}catch(B){if(B instanceof se&&!e.headersSent){ur(e,B.status,Oe(B.code,B.message),{connection:"close"});return}throw B}}async function Fa(x){let{session:A,logger:r}=x,e=x.host??P7;R7(x,e);let t=new oa;for(let l of sf)A.on(l,B=>t.broadcast(l,B));let a=ef.default.createServer((l,B)=>{W7(x,t,l,B).catch(D=>{let p=D instanceof Error?D.message:String(D);r.error(`Dev server error: ${p}`),B.headersSent||ur(B,500,Oe("E_INTERNAL",p))})});try{await new Promise((l,B)=>{a.once("error",B),a.listen(x.port??N7,e,()=>{a.off("error",B),l()})})}catch(l){throw t.close(),l}a.on("error",l=>r.error(`Dev server socket error: ${l.message}`));let s=a.address().port;return{url:`http://${e}:${s}`,port:s,async close(){t.close(),a.closeIdleConnections(),a.closeAllConnections(),await Promise.race([new Promise(l=>a.close(()=>l())),X7(I7)])}}}function X7(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var Y7={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function Q7(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},r=tf.Utils.joinPath(x.cwd,o0.filePaths.dist.ddeApi);if(await x.fs.stat(r))try{let e=new TextDecoder().decode(await x.fs.readFile(r)),t=nf.default.parse(e);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(e){let t=e instanceof Error?e.message:String(e);x.logger.warn(`Could not parse ${o0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...Y7},A}var Ut=require("node:fs"),ff=require("node:path"),lf=require("vscode-uri");var Z7=300,x6=new Set([o0.fileNames.projectSettings,o0.filePaths.appIni]);function va(x){return x instanceof Error?x.message:String(x)}function A6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function r6(x){let A=[],r=e=>{A.push(e);for(let t of(0,Ut.readdirSync)(e,{withFileTypes:!0}))t.isDirectory()&&r((0,ff.join)(e,t.name))};try{r(x)}catch{}return A}function Ef(x){let{cwd:A,session:r,logger:e}=x,t=x.debounceMs??Z7,a=[],s,l=!1,B=!1,D=async()=>{if(l){B=!0;return}l=!0;try{let q=await r.build();if(q.ok!==!0){e.error(`Rebuild failed: ${q.message??"see diagnostics"}`);return}if(x.flash!==!1){let S=await r.flash();if(!S.success){e.error(S.message);return}}await r.sync()}catch(q){e.error(`Watch cycle failed: ${q instanceof Error?q.message:String(q)}`)}finally{l=!1,B&&(B=!1,p())}};function p(){s&&clearTimeout(s),s=setTimeout(()=>{D()},t),s.unref?.()}let j=q=>(S,P)=>{let T=typeof P=="string"?P.replace(/\\/g,"/"):null;(!q||T!==null&&q(T))&&p()},g=(q,S,P)=>{let T=lf.Utils.joinPath(A,q);try{a.push((0,Ut.watch)(T.fsPath,{recursive:S},j(P)))}catch(M){if(A6(M))return;if(S){e.warn(`Recursive file watching is not available on this platform (${va(M)}) \u2014 watching every directory under ${q} individually.`);for(let N of r6(T.fsPath))try{a.push((0,Ut.watch)(N,{recursive:!1},j(P)))}catch(z){e.warn(`Could not watch ${N}: ${va(z)}`)}return}e.warn(`Could not watch ${q}: ${va(M)}`)}};return g(o0.filePaths.dlo.path,!0),g(o0.filePaths.dde.path,!0),g(".",!1,q=>x6.has(q)),{close(){s&&clearTimeout(s);for(let q of a)q.close()}}}var e6=new Set(["uto-meta","state","console","command","recorder-drop"]),t6=".ndjson",n6=[".db",".sqlite",".sqlite3"];function cf(x,A,r,e){if(!e6.has(x))return{ts:e,type:x,owner:r??null,bytes:A};try{return{ts:e,type:x,owner:r??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:e,type:x,owner:r??null,bytes:A}}}function s6(x){let A=x.split(/\r?\n/).filter(r=>r.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function i6(x){let A=JSON.parse(x[0]),r=new Map;for(let e of x.slice(1)){let t=JSON.parse(e),a=new Uint8Array(Buffer.from(t.data,"base64")),s=cf(t.type,a,t.owner,t.ts),l=r.get(t.sessionId);l?l.push(s):r.set(t.sessionId,[s])}return{manifest:A,recordsBySession:r}}function a6(x){if(x.length===0)return;let A=x[0].ts,r=x[0].ts;for(let e of x)e.ts<A&&(A=e.ts),e.ts>r&&(r=e.ts);return{min:A,max:r}}function o6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(e=>{let t=x.sessions.find(l=>l.sessionId===e),a=A.get(e)??[],s=a6(a);return{id:e,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:s?.min??x.exportedTs,endedTs:s?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:a.length}})}async function F6(x,A){let r=new TextDecoder().decode(await A.readFile(x)),{manifest:e,recordsBySession:t}=i6(s6(r));return{sessions:o6(e,t),recordsFor:s=>(t.get(s)??[]).slice().sort((l,B)=>l.ts-B.ts),warnings:[]}}async function v6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function Bf(x,A){let r=x.prepare(A),e=[];try{for(;r.step();)e.push(r.getAsObject())}finally{r.free()}return e}function Ht(x){return x==null?null:String(x)}function fa(x){return typeof x=="number"?x:Number(x)}function f6(x,A,r){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(r.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function l6(x,A){let r=await v6(),e=await A.readFile(x),t=new r.Database(e);try{let a=[],s=new Map;for(let B of Bf(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let D=String(B.session_id),p=String(B.type),j=fa(B.ts),g=f6(B.data,`${p}@${j} (session ${D})`,a),q=cf(p,g,Ht(B.owner),j),S=s.get(D);S?S.push(q):s.set(D,[q])}return{sessions:Bf(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(B=>{let D=String(B.session_id);return{id:D,serial:Ht(B.serial),deviceId:Ht(B.device_id),startedTs:fa(B.started_ts),endedTs:B.ended_ts===null||B.ended_ts===void 0?null:fa(B.ended_ts),appVersion:Ht(B.app_version),platform:Ht(B.platform),recordCount:(s.get(D)??[]).length}}),recordsFor:B=>s.get(B)??[],warnings:a}}finally{t.close()}}async function la(x,A){let r=x.path.toLowerCase();if(r.endsWith(t6))return F6(x,A);if(n6.some(e=>r.endsWith(e)))return l6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Ea(x,A){if(A){let r=x.sessions.find(e=>e.id===A);if(!r){let e=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${e}`)}return r}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((r,e)=>e.recordCount>r.recordCount?e:r)}var uf=require("node:events"),bf=nx(ne());var Cf="at-tx",Ba="at-rx",E6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function B6(x){let A="";for(let r=0;r<x.length;r++)A+=String.fromCharCode(x[r]);return A}function df(x){let A=E6.exec(B6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function c6(x,A){if(x.length!==A.length)return!1;for(let r=0;r<x.length;r++)if(x[r]!==A[r])return!1;return!0}function C6(x,A){if(c6(x,A))return!0;let r=df(x),e=df(A);return r!==null&&e!==null&&r===e}function d6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function D6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function ca(x){return`hex[${d6(x)}] ascii["${D6(x)}"]`}function u6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Ca(x){return x===void 0?1:x==="max"||x<=0?0:x}var rs=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,r={}){this.entries=A.filter(e=>e.type===Cf||e.type===Ba).slice().sort((e,t)=>e.ts-t.ts).map(e=>({record:e,consumed:!1})),this.speed=Ca(r.speed),this.onWarning=r.onWarning??(()=>{}),this.baseTs=r.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==Ba)continue;let r=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,e=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},r);e.unref?.(),A.timer=e,this.timers.push(e)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==Cf;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let r=new Uint8Array(A),e=this.advanceToNextTx();if(!e){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${ca(r)}`);return}let t=e.record.bytes??new Uint8Array(0);if(!C6(t,r)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${ca(t)} actual: ${ca(r)}`);return}for(e.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ba;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,r=!1){if(A.consumed&&!r)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let e=u6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(e)}};var es="state",Da="console",pf="command",jf="uto-meta",da="at",b6=new Set([es,Da,pf,jf]),p6="not available in replay mode",Df="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function j6(x){return x===es?"state":x===Da?"console":x===jf?"uto":da}function m6(x,A){return x===Da&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===pf&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Jt=class extends uf.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new at({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let r=A.recording.recordsFor(A.session.id),e=r.length>0?r[0].ts:0;this.transport=new rs(r,{speed:A.speed,baseTs:e,onWarning:t=>this.logStream.push(da,t)}),this.atHandler=new bf.AtCommandHandler(this.transport,Me(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(r,e)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,r){let e=Ca(this.speed);for(let t of A){if(!b6.has(t.type))continue;let a=e>0?Math.max(0,(t.ts-r)/e):0,s=setTimeout(()=>this.emitAnnotation(t),a);s.unref?.(),this.timers.push(s)}}emitAnnotation(A){A.type===es&&(this.lastState=A.json??null,this.emit(es,this.lastState)),this.logStream.push(j6(A.type),m6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:Df})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new kx(p6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(da,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let r={};for(let e of Object.keys(A))r[e]={ok:!1,err:Df};return r}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var h6="details";function g6(){return[S0.Part.dde,S0.Part.dlo,S0.Part.dfiles]}async function kf(x,A,r){let e=r.logger??new Tr.Logger;if(r.replay){if(r.serial)throw new Error("--replay cannot be combined with --serial");return y6(x,A,r,e)}if(!r.serial)throw new Error("--serial is required unless --replay is given");let t=new Re({cwd:x,fs:A,serial:r.serial,transportFactory:r.transportFactory,createDevice:r.createDevice,pollIntervalMs:r.pollIntervalMs,flash:r.flash!==!1,build:r.build!==!1,part:r.part??g6(),logger:e,env:r.env,apiToken:r.apiToken,waitMs:r.waitMs,logFile:r.logFile,persistMirror:r.persistMirror!==!1,debug:r.debug});t.on("error",D=>e.warn(D instanceof Error?D.message:String(D)));try{await t.start()}catch(D){throw await t.stop(),D}let a,s,l;try{a=await Fa({session:t,cwd:x,fs:A,logger:e,host:r.host,port:r.port,token:r.token,allowRemote:r.allowRemote}),r.watch&&(s=Ef({cwd:x,session:t,logger:e,flash:r.flash!==!1})),r.pov&&(l=yf(x,t,a.url,r.pov,e))}catch(D){throw await a?.close(),await t.stop(),D}let B=a;return{url:B.url,port:B.port,session:t,apmId:t.status().apmId,async close(){s?.close(),_f(l,e),await B.close(),await t.stop()}}}function k6(x,A){return gf.isAbsolute(A)?ot.URI.file(A):ot.Utils.joinPath(x,A)}async function y6(x,A,r,e){let t=k6(x,r.replay),a=await la(t,A);for(let j of a.warnings)e.warn(j);let s=Ea(a,r.session),l=new Jt({file:t.fsPath,recording:a,session:s,speed:r.speed,logger:e,logFile:r.logFile});l.on("error",j=>e.warn(j instanceof Error?j.message:String(j))),l.start();let B,D;try{B=await Fa({session:l,cwd:x,fs:A,logger:e,host:r.host,port:r.port,token:r.token,allowRemote:r.allowRemote}),r.pov&&(D=yf(x,l,B.url,r.pov,e))}catch(j){throw await B?.close(),await l.stop(),j}let p=B;return{url:p.url,port:p.port,session:l,apmId:l.status().apmId,async close(){_f(D,e),await p.close(),await l.stop()}}}function yf(x,A,r,e,t){let a=typeof e=="string"&&e.length>0?e:h6,s=ot.Utils.joinPath(x,"pov",a);if(!(0,hf.existsSync)(ot.Utils.joinPath(s,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${s.fsPath}`);return}let l=wr.spawnNpm(["run","dev"],{cwd:s.fsPath,env:{...process.env,MYDATANET_HOST:r},detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),B=D=>{for(let p of D.toString("utf8").split(/\r?\n/)){let j=p.trim();j&&A.logStream.push("pov",j)}};return l.stdout?.on("data",B),l.stderr?.on("data",B),l.on("error",D=>t.error(`POV dev server failed: ${D.message}`)),t.info(`POV dev server: npm run dev in ${s.fsPath} (MYDATANET_HOST=${r})`),l}function _f(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,mf.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(r){A.debug(`Could not stop the POV dev server: ${r instanceof Error?r.message:String(r)}`),x.kill()}}var wf=require("uuid"),_6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",ua=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(ua||{});var ts=class{domain;auth;logger;userInfo=null;constructor(A,r,e){if(typeof A=="object"){let{serverUrl:t,apiToken:a,authHeader:s,logger:l}=A;this.domain=this.normalizeServerUrl(t),this.auth=s||(a?`Bearer ${a}`:""),this.logger=l}else this.domain=this.normalizeServerUrl(A),typeof r=="string"?(this.auth=`Bearer ${r}`,this.logger=e):(this.auth="",this.logger=r)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,r,e){let t=`${this.domain}${r}`,a={Authorization:this.auth},s={method:A,headers:a};e&&(e instanceof FormData?s.body=e:(a["Content-Type"]="application/json",s.body=JSON.stringify(e)));let l=await fetch(t,s);if(!l.ok){let B=await l.text().catch(()=>"Unknown error");throw new Error(`HTTP ${l.status}: ${B}`)}return l.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:r}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:r},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,r){this.logger?.info(`Uploading development tag ${A}...`);let{applid:e}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,r);return this.logger?.info(`Development tag uploaded, application ID: ${e}`),e}async getCustomer(A){let{_uid:r,name:e}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:r,name:e}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,r){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${r}`)}catch{return null}}async createDevelopmentSite(A,r,e){if(this.logger?.info(`Creating development site "${r.name}"...`),r.serialNumber){let a=await this.getSite(A,r.name.toLowerCase());if(a)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${a._uid}/cn-attach-device`,{device_id:r.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${a._uid}`),a._uid}catch(s){if(s.message&&!s.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${s.message}`);else return a._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:r.name,create:!0,force:!0,note:"This is a Studio development site",applid:r.applicationId,device_id:r.serialNumber,reg_code:e,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,r){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:r})}catch{}}};function ba(x){return(0,wf.v5)(x,_6)}async function Sf(x,A,r,e,t,a,s){let l=await Z.read(x,A),B=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),D=l.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),p=await Z.isApmPartEnabled(x,A,S0.Part.dlo,l),j=p&&e,g=j?e.toUpperCase():`${D}_${B}`,q=j?e:g,S=s||g;return S.length>50&&(r.warn(`Site name "${S}" is too long. Truncating to 50 characters.`),S=S.substring(0,50)),{apmId:ba(q),applicationId:null,name:S,version:1,serialNumber:p?e:void 0,siteUid:null,customerUid:a}}async function w6(x,A,r,e,t,a,s=!1){if(a.length>0)for(let l of a){let[B,D]=l.split("@");await Bx.installDependency(x,A,r,e,t,B,D||null,s)}else await Bx.installDependencies(x,A,r,e,t);await Bx.installNpmInApmParts(x,A,r)}async function S6(x,A,r,e,t=null,a=!0,s){return await Z.validateBasicManifest(x,A,null),Nx.buildAll(x,A,r,e,t,a,s)}async function q6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let r=await Z.validateRegistryAllowedBackends(A);if(r)throw new Error(r)}return A}async function T6(x,A,r,e,t,a,s,l){r.info("Publishing package...");let B=await q6(a);if(l)await Nx.publishArchive(x,A,r,t,e,l,s,B);else return await Nx.validatePublishSettings(x,A,t,e),Nx.release(x,A,r,e,t,s,B)}async function $6(x,A,r,e,t,a){return Nx.pack(x,A,r,e,t,a)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2793
|
+
`);let s={res:r,types:a,stalled:0};this.clients.add(s),A.on("close",()=>this.clients.delete(s)),r.on("close",()=>this.clients.delete(s)),r.on("error",()=>this.clients.delete(s))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function E6(x,A,r,e){let t=A.method??"GET",a={path:e,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([l,E])=>[l,Array.isArray(E)?E.join(","):E??""])),body:uf(t)?await Df(A):null},s=await x.handleApi(a);ur(r,s.status,s.body,s.headers)}async function B6(x,A,r,e){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(vf(e,"file"));case"POST /dev/sync":return t.sync(l6(e,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(ff(r,"since",0),ff(r,"limit",500))};case"POST /dev/at":return c6(t,vf(e,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return p6(x);case"GET /dev/configs":return t.configs();default:return}}async function c6(x,A){if(!A)throw new se(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function C6(x,A,r,e){let[t,a=""]=e.split("?"),s=A.method??"GET",l=uf(s)?await Df(A):"";try{if(s==="PUT"&&t==="/dev/configs"){let D=await x.session.applyConfigs(Ff(l)),b=Object.values(D).every(j=>j.ok);ur(r,b?200:400,JSON.stringify({results:D}));return}let E=await B6(x,`${s} ${t}`,new URLSearchParams(a),Ff(l));if(E===void 0){ur(r,404,Oe(df,`no route for ${s} ${t}`));return}ur(r,200,JSON.stringify(E))}catch(E){if(E instanceof se){ur(r,E.status,Oe(E.code,E.message));return}ur(r,500,Oe("E_DEV",E instanceof Error?E.message:String(E)))}}async function d6(x,A,r,e){if(v6(r,e),r.method==="OPTIONS"){e.writeHead(204),e.end();return}let t=r.url??"/",a=t.split("?")[1]??"",s=t==="/events"||t.startsWith("/events?"),l=s?new URLSearchParams(a).get("token")??void 0:void 0;if(!f6(r,x.token,l)){ur(e,401,Oe("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await E6(x.session,r,e,t):s?A.subscribe(r,e,a):t.startsWith("/dev/")?await C6(x,r,e,t):ur(e,404,Oe(df,`no route for ${t}`))}catch(E){if(E instanceof se&&!e.headersSent){ur(e,E.status,Oe(E.code,E.message),{connection:"close"});return}throw E}}async function fa(x){let{session:A,logger:r}=x,e=x.host??t6;o6(x,e);let t=new va;for(let l of cf)A.on(l,E=>t.broadcast(l,E));let a=lf.default.createServer((l,E)=>{d6(x,t,l,E).catch(D=>{let b=D instanceof Error?D.message:String(D);r.error(`Dev server error: ${b}`),E.headersSent||ur(E,500,Oe("E_INTERNAL",b))})});try{await new Promise((l,E)=>{a.once("error",E),a.listen(x.port??n6,e,()=>{a.off("error",E),l()})})}catch(l){throw t.close(),l}a.on("error",l=>r.error(`Dev server socket error: ${l.message}`));let s=a.address().port;return{url:`http://${e}:${s}`,port:s,async close(){t.close(),a.closeIdleConnections(),a.closeAllConnections(),await Promise.race([new Promise(l=>a.close(()=>l())),D6(s6)])}}}function D6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var u6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function p6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},r=Ef.Utils.joinPath(x.cwd,o0.filePaths.dist.ddeApi);if(await x.fs.stat(r))try{let e=new TextDecoder().decode(await x.fs.readFile(r)),t=Bf.default.parse(e);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(e){let t=e instanceof Error?e.message:String(e);x.logger.warn(`Could not parse ${o0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...u6},A}var Ht=require("node:fs"),pf=require("node:path"),bf=require("vscode-uri");var b6=300,j6=new Set([o0.fileNames.projectSettings,o0.filePaths.appIni]);function la(x){return x instanceof Error?x.message:String(x)}function m6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function h6(x){let A=[],r=e=>{A.push(e);for(let t of(0,Ht.readdirSync)(e,{withFileTypes:!0}))t.isDirectory()&&r((0,pf.join)(e,t.name))};try{r(x)}catch{}return A}function jf(x){let{cwd:A,session:r,logger:e}=x,t=x.debounceMs??b6,a=[],s,l=!1,E=!1,D=async()=>{if(l){E=!0;return}l=!0;try{let q=await r.build();if(q.ok!==!0){e.error(`Rebuild failed: ${q.message??"see diagnostics"}`);return}if(x.flash!==!1){let S=await r.flash();if(!S.success){e.error(S.message);return}}await r.sync()}catch(q){e.error(`Watch cycle failed: ${q instanceof Error?q.message:String(q)}`)}finally{l=!1,E&&(E=!1,b())}};function b(){s&&clearTimeout(s),s=setTimeout(()=>{D()},t),s.unref?.()}let j=q=>(S,P)=>{let T=typeof P=="string"?P.replace(/\\/g,"/"):null;(!q||T!==null&&q(T))&&b()},g=(q,S,P)=>{let T=bf.Utils.joinPath(A,q);try{a.push((0,Ht.watch)(T.fsPath,{recursive:S},j(P)))}catch(M){if(m6(M))return;if(S){e.warn(`Recursive file watching is not available on this platform (${la(M)}) \u2014 watching every directory under ${q} individually.`);for(let N of h6(T.fsPath))try{a.push((0,Ht.watch)(N,{recursive:!1},j(P)))}catch(z){e.warn(`Could not watch ${N}: ${la(z)}`)}return}e.warn(`Could not watch ${q}: ${la(M)}`)}};return g(o0.filePaths.dlo.path,!0),g(o0.filePaths.dde.path,!0),g(".",!1,q=>j6.has(q)),{close(){s&&clearTimeout(s);for(let q of a)q.close()}}}var g6=new Set(["uto-meta","state","console","command","recorder-drop"]),k6=".ndjson",y6=[".db",".sqlite",".sqlite3"];function hf(x,A,r,e){if(!g6.has(x))return{ts:e,type:x,owner:r??null,bytes:A};try{return{ts:e,type:x,owner:r??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:e,type:x,owner:r??null,bytes:A}}}function _6(x){let A=x.split(/\r?\n/).filter(r=>r.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function w6(x){let A=JSON.parse(x[0]),r=new Map;for(let e of x.slice(1)){let t=JSON.parse(e),a=new Uint8Array(Buffer.from(t.data,"base64")),s=hf(t.type,a,t.owner,t.ts),l=r.get(t.sessionId);l?l.push(s):r.set(t.sessionId,[s])}return{manifest:A,recordsBySession:r}}function S6(x){if(x.length===0)return;let A=x[0].ts,r=x[0].ts;for(let e of x)e.ts<A&&(A=e.ts),e.ts>r&&(r=e.ts);return{min:A,max:r}}function q6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(e=>{let t=x.sessions.find(l=>l.sessionId===e),a=A.get(e)??[],s=S6(a);return{id:e,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:s?.min??x.exportedTs,endedTs:s?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:a.length}})}async function T6(x,A){let r=new TextDecoder().decode(await A.readFile(x)),{manifest:e,recordsBySession:t}=w6(_6(r));return{sessions:q6(e,t),recordsFor:s=>(t.get(s)??[]).slice().sort((l,E)=>l.ts-E.ts),warnings:[]}}async function $6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function mf(x,A){let r=x.prepare(A),e=[];try{for(;r.step();)e.push(r.getAsObject())}finally{r.free()}return e}function Kt(x){return x==null?null:String(x)}function Ea(x){return typeof x=="number"?x:Number(x)}function P6(x,A,r){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(r.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function N6(x,A){let r=await $6(),e=await A.readFile(x),t=new r.Database(e);try{let a=[],s=new Map;for(let E of mf(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let D=String(E.session_id),b=String(E.type),j=Ea(E.ts),g=P6(E.data,`${b}@${j} (session ${D})`,a),q=hf(b,g,Kt(E.owner),j),S=s.get(D);S?S.push(q):s.set(D,[q])}return{sessions:mf(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(E=>{let D=String(E.session_id);return{id:D,serial:Kt(E.serial),deviceId:Kt(E.device_id),startedTs:Ea(E.started_ts),endedTs:E.ended_ts===null||E.ended_ts===void 0?null:Ea(E.ended_ts),appVersion:Kt(E.app_version),platform:Kt(E.platform),recordCount:(s.get(D)??[]).length}}),recordsFor:E=>s.get(E)??[],warnings:a}}finally{t.close()}}async function Ba(x,A){let r=x.path.toLowerCase();if(r.endsWith(k6))return T6(x,A);if(y6.some(e=>r.endsWith(e)))return N6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function ca(x,A){if(A){let r=x.sessions.find(e=>e.id===A);if(!r){let e=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${e}`)}return r}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((r,e)=>e.recordCount>r.recordCount?e:r)}var _f=require("node:events"),wf=nx(ne());var gf="at-tx",Ca="at-rx",I6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function M6(x){let A="";for(let r=0;r<x.length;r++)A+=String.fromCharCode(x[r]);return A}function kf(x){let A=I6.exec(M6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function L6(x,A){if(x.length!==A.length)return!1;for(let r=0;r<x.length;r++)if(x[r]!==A[r])return!1;return!0}function R6(x,A){if(L6(x,A))return!0;let r=kf(x),e=kf(A);return r!==null&&e!==null&&r===e}function O6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function G6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function da(x){return`hex[${O6(x)}] ascii["${G6(x)}"]`}function U6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Da(x){return x===void 0?1:x==="max"||x<=0?0:x}var ts=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,r={}){this.entries=A.filter(e=>e.type===gf||e.type===Ca).slice().sort((e,t)=>e.ts-t.ts).map(e=>({record:e,consumed:!1})),this.speed=Da(r.speed),this.onWarning=r.onWarning??(()=>{}),this.baseTs=r.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==Ca)continue;let r=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,e=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},r);e.unref?.(),A.timer=e,this.timers.push(e)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==gf;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let r=new Uint8Array(A),e=this.advanceToNextTx();if(!e){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${da(r)}`);return}let t=e.record.bytes??new Uint8Array(0);if(!R6(t,r)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${da(t)} actual: ${da(r)}`);return}for(e.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ca;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,r=!1){if(A.consumed&&!r)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let e=U6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(e)}};var ns="state",pa="console",Sf="command",qf="uto-meta",ua="at",H6=new Set([ns,pa,Sf,qf]),K6="not available in replay mode",yf="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function J6(x){return x===ns?"state":x===pa?"console":x===qf?"uto":ua}function z6(x,A){return x===pa&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===Sf&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Jt=class extends _f.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new at({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let r=A.recording.recordsFor(A.session.id),e=r.length>0?r[0].ts:0;this.transport=new ts(r,{speed:A.speed,baseTs:e,onWarning:t=>this.logStream.push(ua,t)}),this.atHandler=new wf.AtCommandHandler(this.transport,Me(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(r,e)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,r){let e=Da(this.speed);for(let t of A){if(!H6.has(t.type))continue;let a=e>0?Math.max(0,(t.ts-r)/e):0,s=setTimeout(()=>this.emitAnnotation(t),a);s.unref?.(),this.timers.push(s)}}emitAnnotation(A){A.type===ns&&(this.lastState=A.json??null,this.emit(ns,this.lastState)),this.logStream.push(J6(A.type),z6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:yf})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new kx(K6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(ua,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let r={};for(let e of Object.keys(A))r[e]={ok:!1,err:yf};return r}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var V6="details";function W6(){return[S0.Part.dde,S0.Part.dlo,S0.Part.dfiles]}async function Nf(x,A,r){let e=r.logger??new Tr.Logger;if(r.replay){if(r.serial)throw new Error("--replay cannot be combined with --serial");return Y6(x,A,r,e)}if(!r.serial)throw new Error("--serial is required unless --replay is given");let t=new Re({cwd:x,fs:A,serial:r.serial,transportFactory:r.transportFactory,createDevice:r.createDevice,pollIntervalMs:r.pollIntervalMs,flash:r.flash!==!1,build:r.build!==!1,part:r.part??W6(),logger:e,env:r.env,apiToken:r.apiToken,waitMs:r.waitMs,logFile:r.logFile,persistMirror:r.persistMirror!==!1,debug:r.debug});t.on("error",D=>e.warn(D instanceof Error?D.message:String(D)));try{await t.start()}catch(D){throw await t.stop(),D}let a,s,l;try{a=await fa({session:t,cwd:x,fs:A,logger:e,host:r.host,port:r.port,token:r.token,allowRemote:r.allowRemote}),r.watch&&(s=jf({cwd:x,session:t,logger:e,flash:r.flash!==!1})),r.pov&&(l=If(x,t,a.url,r.pov,e))}catch(D){throw await a?.close(),await t.stop(),D}let E=a;return{url:E.url,port:E.port,session:t,apmId:t.status().apmId,async close(){s?.close(),Mf(l,e),await E.close(),await t.stop()}}}function X6(x,A){return Pf.isAbsolute(A)?ot.URI.file(A):ot.Utils.joinPath(x,A)}async function Y6(x,A,r,e){let t=X6(x,r.replay),a=await Ba(t,A);for(let j of a.warnings)e.warn(j);let s=ca(a,r.session),l=new Jt({file:t.fsPath,recording:a,session:s,speed:r.speed,logger:e,logFile:r.logFile});l.on("error",j=>e.warn(j instanceof Error?j.message:String(j))),l.start();let E,D;try{E=await fa({session:l,cwd:x,fs:A,logger:e,host:r.host,port:r.port,token:r.token,allowRemote:r.allowRemote}),r.pov&&(D=If(x,l,E.url,r.pov,e))}catch(j){throw await E?.close(),await l.stop(),j}let b=E;return{url:b.url,port:b.port,session:l,apmId:l.status().apmId,async close(){Mf(D,e),await b.close(),await l.stop()}}}function If(x,A,r,e,t){let a=typeof e=="string"&&e.length>0?e:V6,s=ot.Utils.joinPath(x,"pov",a);if(!(0,$f.existsSync)(ot.Utils.joinPath(s,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${s.fsPath}`);return}let l=wr.spawnNpm(["run","dev"],{cwd:s.fsPath,env:{...process.env,MYDATANET_HOST:r},detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),E=D=>{for(let b of D.toString("utf8").split(/\r?\n/)){let j=b.trim();j&&A.logStream.push("pov",j)}};return l.stdout?.on("data",E),l.stderr?.on("data",E),l.on("error",D=>t.error(`POV dev server failed: ${D.message}`)),t.info(`POV dev server: npm run dev in ${s.fsPath} (MYDATANET_HOST=${r})`),l}function Mf(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Tf.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(r){A.debug(`Could not stop the POV dev server: ${r instanceof Error?r.message:String(r)}`),x.kill()}}var Lf=require("uuid"),Q6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",ba=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(ba||{});var ss=class{domain;auth;logger;userInfo=null;constructor(A,r,e){if(typeof A=="object"){let{serverUrl:t,apiToken:a,authHeader:s,logger:l}=A;this.domain=this.normalizeServerUrl(t),this.auth=s||(a?`Bearer ${a}`:""),this.logger=l}else this.domain=this.normalizeServerUrl(A),typeof r=="string"?(this.auth=`Bearer ${r}`,this.logger=e):(this.auth="",this.logger=r)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,r,e){let t=`${this.domain}${r}`,a={Authorization:this.auth},s={method:A,headers:a};e&&(e instanceof FormData?s.body=e:(a["Content-Type"]="application/json",s.body=JSON.stringify(e)));let l=await fetch(t,s);if(!l.ok){let E=await l.text().catch(()=>"Unknown error");throw new Error(`HTTP ${l.status}: ${E}`)}return l.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:r}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:r},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,r){this.logger?.info(`Uploading development tag ${A}...`);let{applid:e}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,r);return this.logger?.info(`Development tag uploaded, application ID: ${e}`),e}async getCustomer(A){let{_uid:r,name:e}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:r,name:e}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,r){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${r}`)}catch{return null}}async createDevelopmentSite(A,r,e){if(this.logger?.info(`Creating development site "${r.name}"...`),r.serialNumber){let a=await this.getSite(A,r.name.toLowerCase());if(a)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${a._uid}/cn-attach-device`,{device_id:r.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${a._uid}`),a._uid}catch(s){if(s.message&&!s.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${s.message}`);else return a._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:r.name,create:!0,force:!0,note:"This is a Studio development site",applid:r.applicationId,device_id:r.serialNumber,reg_code:e,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,r){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:r})}catch{}}};function ja(x){return(0,Lf.v5)(x,Q6)}async function Rf(x,A,r,e,t,a,s){let l=await Z.read(x,A),E=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),D=l.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),b=await Z.isApmPartEnabled(x,A,S0.Part.dlo,l),j=b&&e,g=j?e.toUpperCase():`${D}_${E}`,q=j?e:g,S=s||g;return S.length>50&&(r.warn(`Site name "${S}" is too long. Truncating to 50 characters.`),S=S.substring(0,50)),{apmId:ja(q),applicationId:null,name:S,version:1,serialNumber:b?e:void 0,siteUid:null,customerUid:a}}async function Z6(x,A,r,e,t,a,s=!1){if(a.length>0)for(let l of a){let[E,D]=l.split("@");await Bx.installDependency(x,A,r,e,t,E,D||null,s)}else await Bx.installDependencies(x,A,r,e,t);await Bx.installNpmInApmParts(x,A,r)}async function xp(x,A,r,e,t=null,a=!0,s){return await Z.validateBasicManifest(x,A,null),Nx.buildAll(x,A,r,e,t,a,s)}async function Ap(x){let A=null;if(x){A=x==="*"?x:x.split(";");let r=await Z.validateRegistryAllowedBackends(A);if(r)throw new Error(r)}return A}async function rp(x,A,r,e,t,a,s,l){r.info("Publishing package...");let E=await Ap(a);if(l)await Nx.publishArchive(x,A,r,t,e,l,s,E);else return await Nx.validatePublishSettings(x,A,t,e),Nx.release(x,A,r,e,t,s,E)}async function ep(x,A,r,e,t,a){return Nx.pack(x,A,r,e,t,a)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2781
2794
|
/*! Bundled license information:
|
|
2782
2795
|
|
|
2783
2796
|
@microtronics/device-master/dist/cjs/index.cjs:
|