adb-sqlite-viewer 1.1.4 → 1.2.0
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/README.md +13 -3
- package/dist/assets/index-ljoNzx66.js +63 -0
- package/dist/index.html +16 -6
- package/electron/main.cjs +31 -3
- package/package.json +18 -3
- package/dist/assets/index-_oblc2Ua.js +0 -63
package/README.md
CHANGED
|
@@ -42,14 +42,24 @@ Then `npm run sqlite-viewer` opens the viewer. Works great alongside React Nativ
|
|
|
42
42
|
|
|
43
43
|
### Desktop App
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
ADB is bundled — no Android SDK required. Double-click to launch.
|
|
46
|
+
|
|
47
|
+
| Platform | Download |
|
|
48
|
+
|----------|----------|
|
|
49
|
+
| Windows | [ADB-SQLite-DevTools-win.exe](https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-win.exe) |
|
|
50
|
+
| macOS (Apple Silicon) | [ADB-SQLite-DevTools-mac-arm64.dmg](https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-mac-arm64.dmg) |
|
|
51
|
+
| macOS (Intel) | [ADB-SQLite-DevTools-mac-x64.dmg](https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-mac-x64.dmg) |
|
|
52
|
+
| Linux | [ADB-SQLite-DevTools-linux.AppImage](https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-linux.AppImage) |
|
|
46
53
|
|
|
47
54
|
### Hosted Version + ADB Bridge
|
|
48
55
|
|
|
49
56
|
Use the deployed version at **[amitwinit.github.io/SQLite-DevTools-Mobile-ReactNative](https://amitwinit.github.io/SQLite-DevTools-Mobile-ReactNative/)** together with the standalone ADB Bridge.
|
|
50
57
|
|
|
51
|
-
1. Download
|
|
52
|
-
|
|
58
|
+
1. Download the bridge for your platform from [Releases](https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases):
|
|
59
|
+
- Windows: `adb-bridge.exe`
|
|
60
|
+
- macOS: `adb-bridge-macos`
|
|
61
|
+
- Linux: `adb-bridge-linux`
|
|
62
|
+
2. Run the bridge binary
|
|
53
63
|
3. Open the hosted website — it auto-detects the bridge
|
|
54
64
|
|
|
55
65
|
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
var Tc=Object.defineProperty;var ka=n=>{throw TypeError(n)};var Ic=(n,e,t)=>e in n?Tc(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var L=(n,e,t)=>Ic(n,typeof e!="symbol"?e+"":e,t),zi=(n,e,t)=>e.has(n)||ka("Cannot "+t);var u=(n,e,t)=>(zi(n,e,"read from private field"),t?t.call(n):e.get(n)),m=(n,e,t)=>e.has(n)?ka("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),b=(n,e,t,i)=>(zi(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),q=(n,e,t)=>(zi(n,e,"access private method"),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function t(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(a){if(a.ep)return;a.ep=!0;const l=t(a);fetch(a.href,l)}})();class ws{constructor(e){L(this,"TValue");L(this,"TOmitInitKey");L(this,"options");this.options=e}}class Mt{constructor(e,t,i,a){L(this,"definition");L(this,"options");L(this,"struct");L(this,"value");this.definition=e,this.options=t,this.struct=i,this.value=a}get hasCustomAccessors(){return this.get!==Mt.prototype.get||this.set!==Mt.prototype.set}getSize(){return this.definition.getSize()}get(){return this.value}set(e){this.value=e}}const Dc={littleEndian:!1};class gs extends Error{constructor(){super("ExactReadable ended"),Object.setPrototypeOf(this,new.target.prototype)}}const ys=Symbol("struct-value");function Nc(n){return typeof n=="object"&&n!==null&&ys in n}class _a{constructor(e){L(this,"fieldValues",{});L(this,"value");this.value=Object.create(e),Object.defineProperty(this.value,ys,{enumerable:!1,value:this})}set(e,t){this.fieldValues[e]=t,t.hasCustomAccessors?Object.defineProperty(this.value,e,{configurable:!0,enumerable:!0,get(){return t.get()},set(i){t.set(i)}}):this.value[e]=t.get()}get(e){return this.fieldValues[e]}}const We={reject(n){return new Ia(n)},resolve(n){return typeof n=="object"&&n!==null&&typeof n.then=="function"?n instanceof Hr||n instanceof Ta||n instanceof Ia?n:new Hr(n):new Ta(n)},try(n){try{return We.resolve(n())}catch(e){return We.reject(e)}}};var Jt;const Is=class Is{constructor(e){m(this,Jt);b(this,Jt,e)}then(e,t){return new Is(u(this,Jt).then(e,t))}valueOrPromise(){return u(this,Jt)}};Jt=new WeakMap;let Hr=Is;var Xt;class Ta{constructor(e){m(this,Xt);b(this,Xt,e)}then(e){return e?We.try(()=>e(u(this,Xt))):this}valueOrPromise(){return u(this,Xt)}}Xt=new WeakMap;var Zt;class Ia{constructor(e){m(this,Zt);b(this,Zt,e)}then(e,t){return t?We.try(()=>t(u(this,Zt))):this}valueOrPromise(){throw u(this,Zt)}}Zt=new WeakMap;function Pc(n,e,t){return t?(n[e]|n[e+1]<<8)<<16>>16:(n[e]<<8|n[e+1])<<16>>16}function Cc(n,e,t){return t?n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24:n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3]}function qc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7]<<24)<<32n:BigInt(n[e]<<24)<<32n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Bc(n,e,t){n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)}function $c(n,e,t){n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn)}function Rc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}function Oc(n,e){return n[e]<<24>>24}function Ac(n,e,t){return t?n[e]|n[e+1]<<8:n[e+1]|n[e]<<8}function yi(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0}function Mc(n,e,t){return t?(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0:(n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3])>>>0}function zc(n,e,t){n[e]=t,n[e+1]=t>>8,n[e+2]=t>>16,n[e+3]=t>>24}function Uc(n,e){return BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n}function Wc(n,e){return BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Fc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n:BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Vc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}const Yt=class Yt{constructor(e,t,i){L(this,"TTypeScriptType");L(this,"size");L(this,"deserialize");L(this,"serialize");this.size=e,this.deserialize=t,this.serialize=i}};L(Yt,"Int64",new Yt(8,qc,Rc)),L(Yt,"Uint64",new Yt(8,Fc,Vc));let Kr=Yt;class jc extends ws{constructor(t,i){super();L(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new Qc(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,0,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class Qc extends Mt{serialize(e,t,i){this.definition.variant.serialize(t,i,this.value,this.options.littleEndian)}}const{TextEncoder:Hc,TextDecoder:Kc}=globalThis,Yc=new Hc,Gc=new Kc;function Ce(n){return Yc.encode(n)}function zt(n){return Gc.decode(n)}class Ha{constructor(){L(this,"TTypeScriptType")}}const si=class si extends Ha{constructor(){super()}toBuffer(e){return e}toValue(e){return e}getSize(e){return e.length}};L(si,"Instance",new si);let Hi=si;const ai=class ai extends Ha{toBuffer(e){return Ce(e)}toValue(e){return zt(e)}getSize(){}};L(ai,"Instance",new ai);let Ki=ai;const Ne=new Uint8Array(0);class Ka extends ws{constructor(t,i){super(i);L(this,"converter");L(this,"TTypeScriptType");this.converter=t}getDeserializeSize(t){return this.getSize()}create(t,i,a,l){return new Ya(this,t,i,a,l)}deserialize(t,i,a){return We.try(()=>{const l=this.getDeserializeSize(a);return l===0?Ne:i.readExactly(l)}).then(l=>{const d=this.converter.toValue(l);return this.create(t,a,d,l)}).valueOrPromise()}}class Ya extends Mt{constructor(t,i,a,l,d){super(t,i,a,l);L(this,"array");this.array=d}set(t){super.set(t),this.array=void 0}serialize(t,i,a){this.array??(this.array=this.definition.converter.toBuffer(this.value)),i.set(this.array,a)}}class Jc extends Ka{getSize(){return this.options.length}}class Xc extends Ka{getSize(){return 0}getDeserializeSize(e){let t=e.value[this.options.lengthField];return typeof t=="string"&&(t=Number.parseInt(t,this.options.lengthFieldRadix??10)),t}create(e,t,i,a){return new Zc(this,e,t,i,a)}}var oi,Ga;class Zc extends Ya{constructor(t,i,a,l,d){super(t,i,a,l,d);m(this,oi);L(this,"length");L(this,"lengthFieldValue");d&&(this.length=d.length);const y=this.definition.options.lengthField,v=a.get(y);this.lengthFieldValue=new el(v,this),a.set(y,this.lengthFieldValue)}getSize(){return this.length===void 0&&(this.length=q(this,oi,Ga).call(this)),this.length===void 0&&(this.array=this.definition.converter.toBuffer(this.value),this.length=this.array.length),this.length}set(t){super.set(t),this.array=void 0,this.length=void 0}}oi=new WeakSet,Ga=function(){const t=this.definition.converter.getSize(this.value);if(t!==void 0&&t<0)throw new Error("Invalid length");return t};class el extends Mt{constructor(t,i){super(t.definition,t.options,t.struct,0);L(this,"originalValue");L(this,"bufferValue");this.originalValue=t,this.bufferValue=i}getSize(){return this.originalValue.getSize()}get(){let t=this.bufferValue.getSize();return typeof this.originalValue.get()=="string"&&(t=t.toString(this.bufferValue.definition.options.lengthFieldRadix??10)),t}set(){}serialize(t,i,a){this.originalValue.set(this.get()),this.originalValue.serialize(t,i,a)}}var Ke;(function(n){n.Uint8={signed:!1,size:1,deserialize(e){return e[0]},serialize(e,t,i){e.setUint8(t,i)}},n.Int8={signed:!0,size:1,deserialize(e){return Oc(e,0)},serialize(e,t,i){e.setInt8(t,i)}},n.Uint16={signed:!1,size:2,deserialize(e,t){return Ac(e,0,t)},serialize(e,t,i,a){e.setUint16(t,i,a)}},n.Int16={signed:!0,size:2,deserialize(e,t){return Pc(e,0,t)},serialize(e,t,i,a){e.setInt16(t,i,a)}},n.Uint32={signed:!1,size:4,deserialize(e,t){return Mc(e,0,t)},serialize(e,t,i,a){e.setUint32(t,i,a)}},n.Int32={signed:!0,size:4,deserialize(e,t){return Cc(e,0,t)},serialize(e,t,i,a){e.setInt32(t,i,a)}}})(Ke||(Ke={}));class tl extends ws{constructor(t,i){super();L(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new nl(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class nl extends Mt{serialize(e,t,i){this.definition.variant.serialize(e,i,this.value,this.options.littleEndian)}}class Ja extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class rl extends Ja{constructor(){super("The underlying readable was ended before the struct was fully deserialized")}}class ms extends Ja{constructor(){super("The underlying readable doesn't contain any more struct")}}var vt,xe,Et,en,ye,gt,Yi,Dn;const Ds=class Ds{constructor(e){m(this,ye);L(this,"TFields");L(this,"TOmitInitKey");L(this,"TExtra");L(this,"TInit");L(this,"TDeserializeResult");L(this,"options");m(this,vt,0);m(this,xe,[]);m(this,Et,{});m(this,en);m(this,Dn,(e,t,i)=>"length"in i?this.field(e,new Jc(t,i)):this.field(e,new Xc(t,i)));L(this,"uint8Array",(e,t,i)=>u(this,Dn).call(this,e,Hi.Instance,t,i));L(this,"string",(e,t,i)=>u(this,Dn).call(this,e,Ki.Instance,t,i));this.options={...Dc,...e}}get size(){return u(this,vt)}get fields(){return u(this,xe)}field(e,t){for(const a of u(this,xe))if(a[0]===e){const l=String(e);throw new Error(`This struct already have a field with name '${l}'`)}u(this,xe).push([e,t]);const i=t.getSize();return b(this,vt,u(this,vt)+i),this}concat(e){if(!(e instanceof Ds))throw new TypeError("The other value must be a `Struct` instance");for(const t of u(e,xe))u(this,xe).push(t);return b(this,vt,u(this,vt)+u(e,vt)),Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(u(e,Et))),this}int8(e,t){return q(this,ye,gt).call(this,e,Ke.Int8,t)}uint8(e,t){return q(this,ye,gt).call(this,e,Ke.Uint8,t)}int16(e,t){return q(this,ye,gt).call(this,e,Ke.Int16,t)}uint16(e,t){return q(this,ye,gt).call(this,e,Ke.Uint16,t)}int32(e,t){return q(this,ye,gt).call(this,e,Ke.Int32,t)}uint32(e,t){return q(this,ye,gt).call(this,e,Ke.Uint32,t)}int64(e,t){return q(this,ye,Yi).call(this,e,Kr.Int64,t)}uint64(e,t){return q(this,ye,Yi).call(this,e,Kr.Uint64,t)}extra(e){return Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(e)),this}postDeserialize(e){return b(this,en,e),this}deserialize(e){const t=new _a(u(this,Et));let i=We.resolve();const a=e.position;for(const[l,d]of u(this,xe))i=i.then(()=>d.deserialize(this.options,e,t)).then(y=>{t.set(l,y)},y=>{throw y instanceof gs?e.position===a?new ms:new rl:y});return i.then(()=>{const l=t.value;if(u(this,en)){const d=u(this,en).call(l,l);if(d!==void 0)return d}return l}).valueOrPromise()}serialize(e,t){let i;if(Nc(e)){i=e[ys];for(const[v,h]of Object.entries(e)){const _=i.get(v);_&&_.set(h)}}else{i=new _a({});for(const[v,h]of u(this,xe)){const _=h.create(this.options,i,e[v]);i.set(v,_)}}let a=0;const l=[];for(const[v]of u(this,xe)){const h=i.get(v),_=h.getSize();l.push({fieldValue:h,size:_}),a+=_}if(!t)t=new Uint8Array(a);else if(t.length<a)throw new TypeError("Output buffer is too small");const d=new DataView(t.buffer,t.byteOffset,t.byteLength);let y=0;for(const{fieldValue:v,size:h}of l)v.serialize(d,t,y),y+=h;return t.length!==a?t.subarray(0,a):t}};vt=new WeakMap,xe=new WeakMap,Et=new WeakMap,en=new WeakMap,ye=new WeakSet,gt=function(e,t,i){return this.field(e,new tl(t,i))},Yi=function(e,t,i){return this.field(e,new jc(t,i))},Dn=new WeakMap;let K=Ds;var re=(function(){function n(){var e=this;this._state="running",this.resolve=function(t){e._resolve(t),e._state="resolved"},this.reject=function(t){e._reject(t),e._state="rejected"},this._promise=new Promise(function(t,i){e._resolve=t,e._reject=i})}return Object.defineProperty(n.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),n})(),il=(function(){function n(e){e===void 0&&(e=0),this.pendingResolvers=new Map,this.nextId=e}return n.prototype.add=function(){var e=this.nextId++,t=new re;return this.pendingResolvers.set(e,t),[e,t.promise]},n.prototype.getResolver=function(e){if(!this.pendingResolvers.has(e))return null;var t=this.pendingResolvers.get(e);return this.pendingResolvers.delete(e),t},n.prototype.resolve=function(e,t){var i=this.getResolver(e);return i!==null?(i.resolve(t),!0):!1},n.prototype.reject=function(e,t){var i=this.getResolver(e);return i!==null?(i.reject(t),!0):!1},n})();function sl(n){return new Promise(function(e){globalThis.setTimeout(function(){return e()},n)})}const mi=globalThis,Lr=mi.AbortController,Ut=mi.ReadableStream,qe=mi.WritableStream,bs=mi.TransformStream;var tn;class wn extends Ut{constructor(t,i){let a;const l=new Lr;super({start:async d=>{await Promise.resolve();const y=t({abortSignal:l.signal,enqueue:async v=>{if(l.signal.aborted)throw l.signal.reason;if(d.desiredSize===null){d.enqueue(v);return}if(u(this,tn)){b(this,tn,!1),d.enqueue(v);return}d.desiredSize<=0&&(a=new re,await a.promise),d.enqueue(v)},close(){d.close()},error(v){d.error(v)}});y&&"then"in y&&y.then(()=>{try{d.close()}catch{}},v=>{d.error(v)})},pull:()=>{if(a){a.resolve();return}(i==null?void 0:i.highWaterMark)===0&&b(this,tn,!0)},cancel:d=>{l.abort(d),a==null||a.reject(d)}},i);m(this,tn,!1)}}tn=new WeakMap;const al=()=>{};var $e,Re,Oe,pe,at,Gi,Ji;class kr{constructor(e){m(this,at);m(this,$e);m(this,Re,0);m(this,Oe,0);m(this,pe,0);L(this,"stream");L(this,"reader");this.stream=e,this.reader=e.getReader()}get position(){return u(this,pe)}readExactly(e){if(u(this,$e)){const t=u(this,$e),i=u(this,Re);return u(this,Oe)>e?(b(this,Re,u(this,Re)+e),b(this,Oe,u(this,Oe)-e),b(this,pe,u(this,pe)+e),t.subarray(i,i+e)):(b(this,$e,void 0),b(this,Oe,0),b(this,Re,0),b(this,pe,u(this,pe)+(t.length-i)),q(this,at,Ji).call(this,e,t.subarray(i)))}return q(this,at,Ji).call(this,e)}release(){return u(this,Oe)>0?new wn(async e=>{const t=u(this,$e).subarray(u(this,Re));for(await e.enqueue(t),e.abortSignal.addEventListener("abort",()=>{this.reader.cancel().catch(al)});;){const{done:i,value:a}=await this.reader.read();if(i)return;await e.enqueue(a)}}):(this.reader.releaseLock(),this.stream)}async cancel(e){await this.reader.cancel(e)}}$e=new WeakMap,Re=new WeakMap,Oe=new WeakMap,pe=new WeakMap,at=new WeakSet,Gi=async function(){const{done:e,value:t}=await this.reader.read();if(e)throw new gs;return t},Ji=async function(e,t){let i,a;if(t)i=new Uint8Array(e),i.set(t),a=t.length,e-=t.length;else{const l=await q(this,at,Gi).call(this);if(l.length===e)return b(this,pe,u(this,pe)+e),l;if(l.length>e)return b(this,$e,l),b(this,Re,e),b(this,Oe,l.length-e),b(this,pe,u(this,pe)+e),l.subarray(0,e);i=new Uint8Array(e),i.set(l),a=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}for(;e>0;){const l=await q(this,at,Gi).call(this);if(l.length===e)return i.set(l,a),b(this,pe,u(this,pe)+e),i;if(l.length>e)return b(this,$e,l),b(this,Re,e),b(this,Oe,l.length-e),i.set(l.subarray(0,e),a),b(this,pe,u(this,pe)+e),i;i.set(l,a),a+=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}return i};var Nn,Pn;class ol{constructor(e){m(this,Nn);m(this,Pn);let t;const i=new kr(new wn(a=>{t=a}));b(this,Nn,new Ut({async pull(a){try{const l=await e(i);a.enqueue(l)}catch(l){if(l instanceof ms){a.close();return}throw l}},cancel:a=>i.cancel(a)})),b(this,Pn,new qe({async write(a){await t.enqueue(a)},abort(){t.close()},close(){t.close()}}))}get readable(){return u(this,Nn)}get writable(){return u(this,Pn)}}Nn=new WeakMap,Pn=new WeakMap;var nn,Le,ci,St,Cn;class Xi{constructor(){m(this,nn,"");m(this,Le,new re);m(this,ci,new qe({write:e=>{b(this,nn,u(this,nn)+e)},close:()=>{u(this,Le).resolve(u(this,nn)),u(this,St).enqueue(u(this,nn)),u(this,St).close()},abort:e=>{u(this,Le).reject(e),u(this,St).error(e)}}));m(this,St);m(this,Cn,new Ut({start:e=>{b(this,St,e)}}));Object.defineProperties(u(this,Cn),{then:{get:()=>u(this,Le).promise.then.bind(u(this,Le).promise)},catch:{get:()=>u(this,Le).promise.catch.bind(u(this,Le).promise)},finally:{get:()=>u(this,Le).promise.finally.bind(u(this,Le).promise)}})}get writable(){return u(this,ci)}get readable(){return u(this,Cn)}}nn=new WeakMap,Le=new WeakMap,ci=new WeakMap,St=new WeakMap,Cn=new WeakMap;const{console:Qr}=globalThis;var Qa;const cl=((Qa=Qr==null?void 0:Qr.createTask)==null?void 0:Qa.bind(Qr))??(()=>({run(n){return n()}}));function ll(n){return typeof n=="object"&&n!==null&&"then"in n}var qn,ke;class be{constructor(e){m(this,qn);m(this,ke);L(this,"value");L(this,"consumed");b(this,qn,cl("Consumable")),this.value=e,b(this,ke,new re),this.consumed=u(this,ke).promise}consume(){u(this,ke).resolve()}error(e){u(this,ke).reject(e)}tryConsume(e){try{let t=u(this,qn).run(()=>e(this.value));return ll(t)?t=t.then(i=>(u(this,ke).resolve(),i),i=>{throw u(this,ke).reject(i),i}):u(this,ke).resolve(),t}catch(t){throw u(this,ke).reject(t),t}}}qn=new WeakMap,ke=new WeakMap;(function(n){class e extends qe{static async write(a,l){const d=new n(l);await a.write(d),await d.consumed}constructor(a,l){let d;l&&(d={},"highWaterMark"in l&&(d.highWaterMark=l.highWaterMark),"size"in l&&(d.size=y=>l.size(y instanceof n?y.value:y))),super({start(y){var v;return(v=a.start)==null?void 0:v.call(a,y)},async write(y,v){await y.tryConsume(h=>{var _;return(_=a.write)==null?void 0:_.call(a,h,v)})},abort(y){var v;return(v=a.abort)==null?void 0:v.call(a,y)},close(){var y;return(y=a.close)==null?void 0:y.call(a)}},d)}}n.WritableStream=e;class t extends Ut{static async enqueue(a,l){const d=new n(l);a.enqueue(d),await d.consumed}constructor(a,l){let d,y;l&&(y={},"highWaterMark"in l&&(y.highWaterMark=l.highWaterMark),"size"in l&&(y.size=v=>l.size(v.value))),super({async start(v){var h;d={async enqueue(_){await t.enqueue(v,_)},close(){v.close()},error(_){v.error(_)}},await((h=a.start)==null?void 0:h.call(a,d))},async pull(){var v;await((v=a.pull)==null?void 0:v.call(a,d))},async cancel(v){var h;await((h=a.cancel)==null?void 0:h.call(a,v))}},y)}}n.ReadableStream=t})(be||(be={}));var st;(function(n){function e(l){return l instanceof be?l.value:l}n.getValue=e;function t(l,d){return l instanceof be?l.tryConsume(d):d(l)}n.tryConsume=t;class i extends bs{constructor(){super({transform(d,y){n.tryConsume(d,v=>{y.enqueue(v)})}})}}n.UnwrapStream=i;class a extends qe{constructor(d,y){let v;y&&(v={},"highWaterMark"in y&&(v.highWaterMark=y.highWaterMark),"size"in y&&(v.size=h=>y.size(h instanceof be?h.value:h))),super({start(h){var _;return(_=d.start)==null?void 0:_.call(d,h)},async write(h,_){await n.tryConsume(h,B=>{var W;return(W=d.write)==null?void 0:W.call(d,B,_)})},abort(h){var _;return(_=d.abort)==null?void 0:_.call(d,h)},close(){var h;return(h=d.close)==null?void 0:h.call(d)}},v)}}n.WritableStream=a})(st||(st={}));var Ae,Me,se,we;class Xa{constructor(e){m(this,Ae);m(this,Me);m(this,se);m(this,we);b(this,Ae,e),b(this,Me,new Uint8Array(e)),b(this,se,0),b(this,we,e)}*push(e){let t=0,i=e.length;if(u(this,se)!==0)if(i>=u(this,we)){if(u(this,Me).set(e.subarray(0,u(this,we)),u(this,se)),t+=u(this,we),i-=u(this,we),yield u(this,Me),b(this,se,0),b(this,we,u(this,Ae)),i===0)return}else{u(this,Me).set(e,u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i);return}for(;i>=u(this,Ae);){const a=t+u(this,Ae);yield e.subarray(t,a),t=a,i-=u(this,Ae)}i>0&&(u(this,Me).set(e.subarray(t),u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i))}flush(){if(u(this,se)===0)return;const e=u(this,Me).subarray(0,u(this,se));return b(this,se,0),b(this,we,u(this,Ae)),e}}Ae=new WeakMap,Me=new WeakMap,se=new WeakMap,we=new WeakMap;class ul extends bs{constructor(e,t=!1){const i=t?new Xa(e):void 0;super({async transform(a,l){await st.tryConsume(a,async d=>{if(i)for(const y of i.push(d))await be.ReadableStream.enqueue(l,y);else{let y=0,v=d.length;for(;v>0;){const h=y+e;await be.ReadableStream.enqueue(l,d.subarray(y,h)),y=h,v-=e}}})},flush(a){if(i){const l=i.flush();l&&a.enqueue(l)}}})}}function hl(n,e){return"start"in n?n.start(e):typeof n=="function"?n(e):n}var rn;class dl extends Ut{constructor(t,i){super({start:async a=>{await Promise.resolve(),this.readable=await hl(t,a),b(this,rn,this.readable.getReader())},pull:async a=>{var d;const l=await u(this,rn).read();l.done?(a.close(),"close"in t&&await((d=t.close)==null?void 0:d.call(t))):a.enqueue(l.value)},cancel:async a=>{var l;await u(this,rn).cancel(a),"cancel"in t&&await((l=t.cancel)==null?void 0:l.call(t,a))}},i);L(this,"readable");m(this,rn)}}rn=new WeakMap;const Da=()=>{};var Bn,$n,xt,Rn,sn;class fl{constructor(e){m(this,Bn,[]);m(this,$n,[]);m(this,xt,!1);m(this,Rn,new re);m(this,sn);b(this,sn,e??{})}get writableClosed(){return u(this,xt)}get closed(){return u(this,Rn).promise}wrapReadable(e,t){return new dl({start:i=>(u(this,Bn).push(i),e),cancel:async()=>{await this.close()},close:async()=>{await this.dispose()}},t)}createWritable(e){const t=e.getWriter();return u(this,$n).push(t),new qe({write:async i=>{await t.write(i)},abort:async i=>{await t.abort(i),await this.close()},close:async()=>{await t.close().catch(Da),await this.close()}})}async close(){var e,t;if(!u(this,xt)){b(this,xt,!0),await((t=(e=u(this,sn)).close)==null?void 0:t.call(e))!==!1&&await this.dispose();for(const i of u(this,$n))i.close().catch(Da)}}async dispose(){var e,t;b(this,xt,!0),u(this,Rn).resolve();for(const i of u(this,Bn))try{i.close()}catch{}await((t=(e=u(this,sn)).dispose)==null?void 0:t.call(e))}}Bn=new WeakMap,$n=new WeakMap,xt=new WeakMap,Rn=new WeakMap,sn=new WeakMap;const pl=globalThis,Zi=pl.TextDecoderStream;function wl(n,e){const t=e.writable.getWriter(),i=e.readable.pipeTo(n);return new qe({async write(a){await t.write(a)},async close(){await t.close(),await i}})}class gl extends ol{constructor(e){super(t=>e.deserialize(t))}}async function yl(n){return"start"in n?await n.start():typeof n=="function"?await n():n}var Lt;const Ns=class Ns extends qe{constructor(t){super({start:async()=>{await Promise.resolve(),this.writable=await yl(t),b(this,Lt,this.writable.getWriter())},write:async i=>{await u(this,Lt).write(i)},abort:async i=>{var a;await u(this,Lt).abort(i),t!==this.writable&&"close"in t&&await((a=t.close)==null?void 0:a.call(t))},close:async()=>{var i;await u(this,Lt).close(),t!==this.writable&&"close"in t&&await((i=t.close)==null?void 0:i.call(t))}});L(this,"writable");m(this,Lt)}bePipedThroughFrom(t){let i;return new Ns({start:()=>(i=t.readable.pipeTo(this),t.writable),async close(){await i}})}};Lt=new WeakMap;let es=Ns;var an;class vs{constructor(){m(this,an,[]);this.dispose=this.dispose.bind(this)}addDisposable(e){return u(this,an).push(e),e}dispose(){for(const e of u(this,an))e.dispose();b(this,an,[])}}an=new WeakMap;class Es extends vs{constructor(t){super();L(this,"adb");this.adb=t}}const ml=new K({littleEndian:!0}).uint32("version"),bl=new K({littleEndian:!0}).uint32("bpp").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"}),vl=new K({littleEndian:!0}).uint32("bpp").uint32("colorSpace").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"});class Za extends Error{constructor(e,t){super(e,t)}}class El extends Za{constructor(e){super(`Unsupported FrameBuffer version ${e}`)}}class Sl extends Za{constructor(){super("FrameBuffer is disabled by current app")}}async function xl(n){const e=await n.createSocket("framebuffer:"),t=new kr(e.readable);let i;try{({version:i}=await ml.deserialize(t))}catch(a){throw a instanceof ms?new Sl:a}switch(i){case 1:return bl.deserialize(t);case 2:return vl.deserialize(t);default:throw new El(i)}}class Ll extends Es{reboot(e=""){return this.adb.createSocketAndWait(`reboot:${e}`)}bootloader(){return this.reboot("bootloader")}fastboot(){return this.reboot("fastboot")}recovery(){return this.reboot("recovery")}sideload(){return this.reboot("sideload")}qualcommEdlMode(){return this.reboot("edl")}powerOff(){return this.adb.subprocess.spawnAndWaitLegacy(["reboot","-p"])}powerButton(e=!1){const t=["input","keyevent"];return e&&t.push("--longpress"),t.push("POWER"),this.adb.subprocess.spawnAndWaitLegacy(t)}samsungOdin(){return this.reboot("download")}}var kt,ze;class eo{constructor(e=!1){m(this,kt);m(this,ze,[]);b(this,kt,e)}wait(){if(!u(this,kt)&&(b(this,kt,!0),u(this,ze).length===0))return Promise.resolve();const e=new re;return u(this,ze).push(e),e.promise}notifyOne(){u(this,ze).length!==0?u(this,ze).pop().resolve():b(this,kt,!1)}dispose(){for(const e of u(this,ze))e.reject(new Error("The AutoResetEvent has been disposed"));u(this,ze).length=0}}kt=new WeakMap,ze=new WeakMap;const H=[],Gt=61;function _r(n,e){const t=n.charCodeAt(0),i=e.charCodeAt(0);for(let a=t;a<=i;a+=1)H.push(a)}_r("A","Z");_r("a","z");_r("0","9");_r("+","+");_r("/","/");function to(n){const e=n%3,t=e!==0?3-e:0;return[(n+t)/3*4,t]}function kl(n,e){const[t,i]=to(n.length);if(e){if(e.length<t)throw new TypeError("output buffer is too small");if(e=e.subarray(0,t),n.buffer!==e.buffer)Ui(n,e,i);else if(e.byteOffset+e.length-(i+1)<=n.byteOffset+n.length)Ui(n,e,i);else if(e.byteOffset>=n.byteOffset-1)_l(n,e,i);else throw new TypeError("input and output cannot overlap");return t}else return e=new Uint8Array(t),Ui(n,e,i),e}function Ui(n,e,t){let i=0,a=0;for(;i<n.length-2;){const l=n[i];i+=1;const d=n[i];i+=1;const y=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2|y>>6],a+=1,e[a]=H[y&63],a+=1}if(t===2){const l=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4],a+=1,e[a]=Gt,a+=1,e[a]=Gt}else if(t===1){const l=n[i];i+=1;const d=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2],a+=1,e[a]=Gt}}function _l(n,e,t){let i=n.length-1,a=e.length-1;if(t===2){const l=n[i];i-=1,e[a]=Gt,a-=1,e[a]=Gt,a-=1,e[a]=H[(l&3)<<4],a-=1,e[a]=H[l>>2],a-=1}else if(t===1){const l=n[i];i-=1;const d=n[i];i-=1,e[a]=Gt,a-=1,e[a]=H[(l&15)<<2],a-=1,e[a]=H[(d&3)<<4|l>>4],a-=1,e[a]=H[d>>2],a-=1}for(;i>=0;){const l=n[i];i-=1;const d=n[i];i-=1;const y=n[i];i-=1,e[a]=H[l&63],a-=1,e[a]=H[(d&15)<<2|l>>6],a-=1,e[a]=H[(y&3)<<4|d>>4],a-=1,e[a]=H[y>>2],a-=1}}function Tl(n){if(n<48)throw new TypeError(`Invalid hex char ${n}`);if(n<58)return n-48;if(n<65)throw new TypeError(`Invalid hex char ${n}`);if(n<71)return n-55;if(n<97)throw new TypeError(`Invalid hex char ${n}`);if(n<103)return n-87;throw new TypeError(`Invalid hex char ${n}`)}function In(n){let e=0;for(let t=0;t<n.length;t+=1)e=e<<4|Tl(n[t]);return e}function Il(n,e,t){const i=e;for(e+=3;e>=i&&t>0;){const a=t&15;t>>=4,a<10?n[e]=a+48:n[e]=a+87,e-=1}for(;e>=i;)n[e]=48,e-=1}const ts=()=>{};function no(...n){throw new Error(`Unreachable. Arguments:
|
|
2
|
+
`+n.join(`
|
|
3
|
+
`))}function Yr(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=1)if(n[t]!==e[t])return!1;return!0}const ro=new K().string("length",{length:4}).string("content",{lengthField:"length",lengthFieldRadix:16});class io extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class Dl extends io{constructor(){super("ADB reverse tunnel is not supported on this device when connected wirelessly.")}}const Nl=new K().concat(ro).postDeserialize(n=>{throw n.content==="more than one device/emulator"?new Dl:new io(n.content)});function Pl(n){let e=0;for(const t of n){if(t<48||t>57)return e;e=e*10+t-48}return e}const Cl=Ce("OKAY");var on;class ql extends vs{constructor(t){super();L(this,"adb");m(this,on,new Map);this.adb=t}async createBufferedStream(t){const i=await this.adb.createSocket(t);return new kr(i.readable)}async sendRequest(t){const i=await this.createBufferedStream(t),a=await i.readExactly(4);return Yr(a,Cl)||await Nl.deserialize(i),i}async list(){const t=await this.createBufferedStream("reverse:list-forward");return(await ro.deserialize(t)).content.split(`
|
|
4
|
+
`).filter(a=>!!a).map(a=>{const[l,d,y]=a.split(" ");return{deviceSerial:l,localName:d,remoteName:y}})}async addExternal(t,i){const a=await this.sendRequest(`reverse:forward:${t};${i}`);if(t.startsWith("tcp:")){const l=a.position;try{const d=In(await a.readExactly(4));t=`tcp:${Pl(await a.readExactly(d))}`}catch(d){if(!(d instanceof gs&&a.position===l))throw d}}return t}async add(t,i,a){a=await this.adb.transport.addReverseTunnel(i,a);try{return t=await this.addExternal(t,a),u(this,on).set(t,a),t}catch(l){throw await this.adb.transport.removeReverseTunnel(a),l}}async remove(t){const i=u(this,on).get(t);i&&await this.adb.transport.removeReverseTunnel(i),await this.sendRequest(`reverse:killforward:${t}`)}async removeAll(){await this.adb.transport.clearReverseTunnels(),u(this,on).clear(),await this.sendRequest("reverse:killforward-all")}}on=new WeakMap;var Ge,On,An;const li=class li{constructor(e){m(this,Ge);m(this,On);m(this,An);b(this,Ge,e),b(this,On,new Ut({start:t=>{u(this,Ge).closed.then(()=>t.close()).catch(no)}})),b(this,An,e.closed.then(()=>0))}static isSupported(){return!0}static async pty(e,t){return new li(await e.createSocket(`shell:${t}`))}static async raw(e,t){return new li(await e.createSocket(`exec:${t}`))}get stdin(){return u(this,Ge).writable}get stdout(){return u(this,Ge).readable}get stderr(){return u(this,On)}get exit(){return u(this,An)}resize(){}async kill(){await u(this,Ge).close()}};Ge=new WeakMap,On=new WeakMap,An=new WeakMap;let Gr=li;var R;(function(n){n.ShellV2="shell_v2",n.Cmd="cmd",n.StatV2="stat_v2",n.ListV2="ls_v2",n.FixedPushMkdir="fixed_push_mkdir",n.Abb="abb",n.AbbExec="abb_exec",n.SendReceiveV2="sendrecv_v2",n.DelayedAck="delayed_ack"})(R||(R={}));var yt;(function(n){n[n.Stdin=0]="Stdin",n[n.Stdout=1]="Stdout",n[n.Stderr=2]="Stderr",n[n.Exit=3]="Exit",n[n.CloseStdin=4]="CloseStdin",n[n.WindowSizeChange=5]="WindowSizeChange"})(yt||(yt={}));const Wi=new K({littleEndian:!0}).uint8("id",void 0).uint32("length").uint8Array("data",{lengthField:"length"});var cn,ln,Mn,zn,Un,_t;const ui=class ui{constructor(e){m(this,cn);m(this,ln);m(this,Mn);m(this,zn);m(this,Un);m(this,_t,new re);b(this,cn,e);let t,i;b(this,zn,new wn(a=>{t=a})),b(this,Un,new wn(a=>{i=a})),e.readable.pipeThrough(new gl(Wi)).pipeTo(new qe({write:async a=>{switch(a.id){case yt.Exit:u(this,_t).resolve(a.data[0]);break;case yt.Stdout:t.abortSignal.aborted||await t.enqueue(a.data);break;case yt.Stderr:i.abortSignal.aborted||await i.enqueue(a.data);break}}})).then(()=>{t.close(),i.close(),u(this,_t).reject(new Error("Socket ended without exit message"))},a=>{t.error(a),i.error(a),u(this,_t).reject(a)}),b(this,ln,u(this,cn).writable.getWriter()),b(this,Mn,new st.WritableStream({write:async a=>{await u(this,ln).write(Wi.serialize({id:yt.Stdin,data:a}))}}))}static isSupported(e){return e.canUseFeature(R.ShellV2)}static async pty(e,t){return new ui(await e.createSocket(`shell,v2,pty:${t}`))}static async raw(e,t){return new ui(await e.createSocket(`shell,v2,raw:${t}`))}get stdin(){return u(this,Mn)}get stdout(){return u(this,zn)}get stderr(){return u(this,Un)}get exit(){return u(this,_t).promise}async resize(e,t){await u(this,ln).write(Wi.serialize({id:yt.WindowSizeChange,data:Ce(`${e}x${t},0x0\0`)}))}kill(){return u(this,cn).close()}};cn=new WeakMap,ln=new WeakMap,Mn=new WeakMap,zn=new WeakMap,Un=new WeakMap,_t=new WeakMap;let ns=ui;const Bl={protocols:[ns,Gr]};var Wn,rs;class $l extends Es{constructor(){super(...arguments);m(this,Wn)}shell(t,i){return q(this,Wn,rs).call(this,"pty",t,i)}spawn(t,i){return q(this,Wn,rs).call(this,"raw",t,i)}async spawnAndWait(t,i){const a=await this.spawn(t,i),[l,d,y]=await Promise.all([a.stdout.pipeThrough(new Zi).pipeThrough(new Xi),a.stderr.pipeThrough(new Zi).pipeThrough(new Xi),a.exit]);return{stdout:l,stderr:d,exitCode:y}}async spawnAndWaitLegacy(t){const{stdout:i}=await this.spawnAndWait(t,{protocols:[Gr]});return i}}Wn=new WeakSet,rs=async function(t,i,a){const{protocols:l}={...Bl,...a};let d;for(const y of l)if(await y.isSupported(this.adb)){d=y;break}if(!d)throw new Error("No specified protocol is supported by the device");return Array.isArray(i)?i=i.join(" "):i===void 0&&(i=""),await d[t](this.adb,i)};function is(n){let e="";e+="'";let t=0;for(;;){const i=n.indexOf("'",t);if(i===-1){e+=n.substring(t);break}e+=n.substring(t,i),e+=String.raw`'\''`,t=i+1}return e+="'",e}function Rl(n){const e=new Uint8Array(n.length);for(let t=0;t<n.length;t+=1)e[t]=n.charCodeAt(t);return e}function V(n){const e=Rl(n);return yi(e,0)}var ae;(function(n){n.Entry=V("DENT"),n.Entry2=V("DNT2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.Lstat2=V("LST2"),n.Done=V("DONE"),n.Data=V("DATA"),n.Ok=V("OKAY"),n.Fail=V("FAIL")})(ae||(ae={}));class Ol extends Error{}const so=new K({littleEndian:!0}).uint32("messageLength").string("message",{lengthField:"messageLength"}).postDeserialize(n=>{throw new Ol(n.message)});async function Jr(n,e,t){typeof e=="string"&&(e=V(e));const i=await n.readExactly(4);switch(yi(i,0)){case ae.Fail:throw await so.deserialize(n),new Error("Unreachable");case e:return await t.deserialize(n);default:throw new Error(`Expected '${e}', but got '${zt(i)}'`)}}async function*Xr(n,e,t){for(typeof e=="string"&&(e=V(e));;){const i=await n.readExactly(4);switch(yi(i,0)){case ae.Fail:throw await so.deserialize(n),new Error("Unreachable");case ae.Done:await n.readExactly(t.size);return;case e:yield await t.deserialize(n);break;default:throw new Error(`Expected '${e}' or '${ae.Done}', but got '${zt(i)}'`)}}}var he;(function(n){n.List=V("LIST"),n.ListV2=V("LIS2"),n.Send=V("SEND"),n.SendV2=V("SND2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.LstatV2=V("LST2"),n.Data=V("DATA"),n.Done=V("DONE"),n.Receive=V("RECV")})(he||(he={}));const Na=new K({littleEndian:!0}).uint32("id").uint32("arg");async function Pe(n,e,t){if(typeof e=="string"&&(e=V(e)),typeof t=="number"){await n.write(Na.serialize({id:e,arg:t}));return}typeof t=="string"&&(t=Ce(t)),await n.write(Na.serialize({id:e,arg:t.length})),await n.write(t)}var Zr;(function(n){n[n.Directory=4]="Directory",n[n.File=8]="File",n[n.Link=10]="Link"})(Zr||(Zr={}));const ao=new K({littleEndian:!0}).int32("mode").int32("size").int32("mtime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.mode===0&&n.size===0&&n.mtime===0)throw new Error("lstat error")});var ei;(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.EACCES=13]="EACCES",n[n.EEXIST=17]="EEXIST",n[n.EFAULT=14]="EFAULT",n[n.EFBIG=27]="EFBIG",n[n.EINTR=4]="EINTR",n[n.EINVAL=22]="EINVAL",n[n.EIO=5]="EIO",n[n.EISDIR=21]="EISDIR",n[n.ELOOP=40]="ELOOP",n[n.EMFILE=24]="EMFILE",n[n.ENAMETOOLONG=36]="ENAMETOOLONG",n[n.ENFILE=23]="ENFILE",n[n.ENOENT=2]="ENOENT",n[n.ENOMEM=12]="ENOMEM",n[n.ENOSPC=28]="ENOSPC",n[n.ENOTDIR=20]="ENOTDIR",n[n.EOVERFLOW=75]="EOVERFLOW",n[n.EPERM=1]="EPERM",n[n.EROFS=30]="EROFS",n[n.ETXTBSY=26]="ETXTBSY"})(ei||(ei={}));const Ss=new K({littleEndian:!0}).uint32("error",void 0).uint64("dev").uint64("ino").uint32("mode").uint32("nlink").uint32("uid").uint32("gid").uint64("size").uint64("atime").uint64("mtime").uint64("ctime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.error)throw new Error(ei[n.error])});async function Al(n,e,t){const i=await n.lock();try{if(t)return await Pe(i,he.LstatV2,e),await Jr(i,ae.Lstat2,Ss);{await Pe(i,he.Lstat,e);const a=await Jr(i,ae.Lstat,ao);return{mode:a.mode,size:BigInt(a.size),mtime:BigInt(a.mtime),get type(){return a.type},get permission(){return a.permission}}}}finally{i.release()}}async function Ml(n,e){const t=await n.lock();try{return await Pe(t,he.Stat,e),await Jr(t,ae.Stat,Ss)}finally{t.release()}}const zl=new K({littleEndian:!0}).concat(ao).uint32("nameLength").string("name",{lengthField:"nameLength"}),Ul=new K({littleEndian:!0}).concat(Ss).uint32("nameLength").string("name",{lengthField:"nameLength"});async function*Wl(n,e){const t=await n.lock();try{await Pe(t,he.ListV2,e);for await(const i of Xr(t,ae.Entry2,Ul))i.error===ei.SUCCESS&&(yield i)}finally{t.release()}}async function*Fl(n,e){const t=await n.lock();try{await Pe(t,he.List,e);for await(const i of Xr(t,ae.Entry,zl))yield i}finally{t.release()}}async function*Vl(n,e,t){if(t)yield*Wl(n,e);else for await(const i of Fl(n,e))yield{mode:i.mode,size:BigInt(i.size),mtime:BigInt(i.mtime),get type(){return i.type},get permission(){return i.permission},name:i.name}}const Pa=new K({littleEndian:!0}).uint32("dataLength").uint8Array("data",{lengthField:"dataLength"});async function*jl(n,e){const t=await n.lock();let i=!1;try{await Pe(t,he.Receive,e);for await(const a of Xr(t,ae.Data,Pa))yield a.data;i=!0}catch(a){throw i=!0,a}finally{if(!i)for await(const a of Xr(t,ae.Data,Pa));t.release()}}function Ql(n,e){return new wn(async t=>{for await(const i of jl(n,e))await t.enqueue(i)})}const oo=64*1024,Hl=new K({littleEndian:!0}).uint32("unused");async function co(n,e,t,i){const a=new Lr;e.pipeThrough(new ul(t,!0)).pipeTo(new st.WritableStream({write:async l=>{await Pe(n,he.Data,l)}}),{signal:a.signal}).then(async()=>{await Pe(n,he.Done,i),await n.flush()},ts),await Jr(n,ae.Ok,Hl).catch(l=>{throw a.abort(),l})}async function Kl({socket:n,filename:e,file:t,type:i=Zr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=oo}){const y=await n.lock();try{const v=i<<12|a,h=`${e},${v.toString()}`;await Pe(y,he.Send,h),await co(y,t,d,l)}finally{y.release()}}var ti;(function(n){n[n.None=0]="None",n[n.Brotli=1]="Brotli",n[n.Lz4=2]="Lz4",n[n.Zstd=4]="Zstd",n[n.DryRun=2147483648]="DryRun"})(ti||(ti={}));const Yl=new K({littleEndian:!0}).uint32("id").uint32("mode").uint32("flags",void 0);async function Gl({socket:n,filename:e,file:t,type:i=Zr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=oo,dryRun:y=!1}){const v=await n.lock();try{await Pe(v,he.SendV2,e);const h=i<<12|a;let _=ti.None;y&&(_|=ti.DryRun),await v.write(Yl.serialize({id:he.SendV2,mode:h,flags:_})),await co(v,t,d,l)}finally{v.release()}}function Jl(n){if(n.v2)return Gl(n);if(n.dryRun)throw new Error("dryRun is not supported in v1");return Kl(n)}var Fn,Tt,Vn,It,Dt,jn,ss;class Xl{constructor(e,t,i,a){m(this,jn);m(this,Fn);m(this,Tt);m(this,Vn);m(this,It,new eo);m(this,Dt);b(this,Fn,e),b(this,Tt,t),b(this,Vn,a),b(this,Dt,new Xa(i))}get position(){return u(this,Tt).position}async flush(){try{await u(this,It).wait();const e=u(this,Dt).flush();e&&await q(this,jn,ss).call(this,e)}finally{u(this,It).notifyOne()}}async write(e){try{await u(this,It).wait();for(const t of u(this,Dt).push(e))await q(this,jn,ss).call(this,t)}finally{u(this,It).notifyOne()}}async readExactly(e){return await this.flush(),await u(this,Tt).readExactly(e)}release(){u(this,Dt).flush(),u(this,Vn).notifyOne()}async close(){await u(this,Tt).cancel()}}Fn=new WeakMap,Tt=new WeakMap,Vn=new WeakMap,It=new WeakMap,Dt=new WeakMap,jn=new WeakSet,ss=async function(e){await be.WritableStream.write(u(this,Fn),e)};var Qn,Hn,un;class Zl{constructor(e,t){m(this,Qn,new eo);m(this,Hn);m(this,un);b(this,Hn,e),b(this,un,new Xl(e.writable.getWriter(),new kr(e.readable),t,u(this,Qn)))}async lock(){return await u(this,Qn).wait(),u(this,un)}async close(){await u(this,un).close(),await u(this,Hn).close()}}Qn=new WeakMap,Hn=new WeakMap,un=new WeakMap;function eu(n){const e=n.lastIndexOf("/");if(e===-1)throw new Error("Invalid path");return e===0?"/":n.substring(0,e)}var Nt,Kn,Yn,Gn,Jn;class tu extends vs{constructor(t,i){super();L(this,"_adb");L(this,"_socket");m(this,Nt);m(this,Kn);m(this,Yn);m(this,Gn);m(this,Jn);this._adb=t,this._socket=new Zl(i,t.maxPayloadSize),b(this,Nt,t.canUseFeature(R.StatV2)),b(this,Kn,t.canUseFeature(R.ListV2)),b(this,Yn,t.canUseFeature(R.FixedPushMkdir)),b(this,Gn,t.canUseFeature(R.SendReceiveV2)),b(this,Jn,this._adb.canUseFeature(R.ShellV2)&&!this.fixedPushMkdir)}get supportsStat(){return u(this,Nt)}get supportsListV2(){return u(this,Kn)}get fixedPushMkdir(){return u(this,Yn)}get supportsSendReceiveV2(){return u(this,Gn)}get needPushMkdirWorkaround(){return u(this,Jn)}async lstat(t){return await Al(this._socket,t,u(this,Nt))}async stat(t){if(!u(this,Nt))throw new Error("Not supported");return await Ml(this._socket,t)}async isDirectory(t){try{return await this.lstat(t+"/"),!0}catch{return!1}}opendir(t){return Vl(this._socket,t,this.supportsListV2)}async readdir(t){const i=[];for await(const a of this.opendir(t))i.push(a);return i}read(t){return Ql(this._socket,t)}async write(t){this.needPushMkdirWorkaround&&await this._adb.subprocess.spawnAndWait(["mkdir","-p",is(eu(t.filename))]),await Jl({v2:this.supportsSendReceiveV2,socket:this._socket,...t})}lockSocket(){return this._socket.lock()}async dispose(){super.dispose(),await this._socket.close()}}Nt=new WeakMap,Kn=new WeakMap,Yn=new WeakMap,Gn=new WeakMap,Jn=new WeakMap;var Xn,as;class nu extends Es{constructor(){super(...arguments);m(this,Xn)}async getListenAddresses(){const t=await this.adb.getProp("service.adb.listen_addrs"),i=await this.adb.getProp("service.adb.tcp.port"),a=await this.adb.getProp("persist.adb.tcp.port");return{serviceListenAddresses:t!=""?t.split(","):[],servicePort:q(this,Xn,as).call(this,i),persistPort:q(this,Xn,as).call(this,a)}}async setPort(t){if(t<=0)throw new TypeError(`Invalid port ${t}`);const i=await this.adb.createSocketAndWait(`tcpip:${t}`);if(i!==`restarting in TCP mode port: ${t}
|
|
5
|
+
`)throw new Error(i);return i}async disable(){const t=await this.adb.createSocketAndWait("usb:");if(t!==`restarting in USB mode
|
|
6
|
+
`)throw new Error(t);return t}}Xn=new WeakSet,as=function(t){if(!(!t||t==="0"))return Number.parseInt(t,10)};class ru{constructor(e){L(this,"transport");L(this,"subprocess");L(this,"power");L(this,"reverse");L(this,"tcpip");this.transport=e,this.subprocess=new $l(this),this.power=new Ll(this),this.reverse=new ql(this),this.tcpip=new nu(this)}get serial(){return this.transport.serial}get maxPayloadSize(){return this.transport.maxPayloadSize}get banner(){return this.transport.banner}get disconnected(){return this.transport.disconnected}get clientFeatures(){return this.transport.clientFeatures}get deviceFeatures(){return this.banner.features}canUseFeature(e){return this.clientFeatures.includes(e)&&this.deviceFeatures.includes(e)}async createSocket(e){return this.transport.connect(e)}async createSocketAndWait(e){return await(await this.createSocket(e)).readable.pipeThrough(new Zi).pipeThrough(new Xi)}async getProp(e){return(await this.subprocess.spawnAndWaitLegacy(["getprop",e])).trim()}async rm(e,t){const i=["rm"];if(t!=null&&t.recursive&&i.push("-r"),t!=null&&t.force&&i.push("-f"),Array.isArray(e))for(const l of e)i.push(is(l));else i.push(is(e));return i.push("</dev/null"),await this.subprocess.spawnAndWaitLegacy(i)}async sync(){const e=await this.createSocket("sync:");return new tu(this,e)}async framebuffer(){return xl(this)}async close(){await this.transport.close()}}var Kt;(function(n){n.Product="ro.product.name",n.Model="ro.product.model",n.Device="ro.product.device",n.Features="features"})(Kt||(Kt={}));var Zn,er,tr,nr;const Ps=class Ps{constructor(e,t,i,a){m(this,Zn);m(this,er);m(this,tr);m(this,nr,[]);b(this,Zn,e),b(this,er,t),b(this,tr,i),b(this,nr,a)}static parse(e){let t,i,a,l=[];const d=e.split("::");if(d.length>1){const y=d[1];for(const v of y.split(";")){if(!v)continue;const h=v.split("=");if(h.length!==2)continue;const[_,B]=h;switch(_){case Kt.Product:t=B;break;case Kt.Model:i=B;break;case Kt.Device:a=B;break;case Kt.Features:l=B.split(",");break}}}return new Ps(t,i,a,l)}get product(){return u(this,Zn)}get model(){return u(this,er)}get device(){return u(this,tr)}get features(){return u(this,nr)}};Zn=new WeakMap,er=new WeakMap,tr=new WeakMap,nr=new WeakMap;let ni=Ps;function os(n,e,t){let i=0n;for(let a=e;a<e+t;a+=8){i<<=64n;const l=Wc(n,a);i|=l}return i}function cs(n,e,t,i,a){if(a)for(;i>0n;)Bc(n,e,i),e+=8,i>>=64n;else{let l=e+t-8;for(;i>0n;)$c(n,l,i),l-=8,i>>=64n}}const iu=38,su=2048/8,au=303,ou=2048/8;function lo(n){const e=os(n,iu,su),t=os(n,au,ou);return[e,t]}function Ca(n,e){const t=n%e;return t>0?t:t+e}function cu(n,e){if(n=Ca(n,e),!n||e<2)return NaN;const t=[];let i=e;for(;i;)[n,i]=[i,n%i],t.push({a:n,b:i});if(n!==1)return NaN;let a=1,l=0;for(let d=t.length-2;d>=0;d-=1)[a,l]=[l,a-l*Math.floor(t[d].a/t[d].b)];return Ca(l,e)}const bt=2048/8,lu=bt/4;function uo(){return 8+bt+bt+4}function uu(n,e){let t;const i=uo();if(!e)e=new Uint8Array(i),t="Uint8Array";else{if(e.length<i)throw new TypeError("output buffer is too small");t="number"}const a=new DataView(e.buffer,e.byteOffset,e.length);let l=0;a.setUint32(l,lu,!0),l+=4;const[d]=lo(n),y=-cu(Number(d%2n**32n),2**32);a.setInt32(l,y,!0),l+=4,cs(e,l,bt,d,!0),l+=bt;const v=2n**4096n%d;return cs(e,l,bt,v,!0),l+=bt,a.setUint32(l,65537,!0),l+=4,t==="Uint8Array"?e:i}function hu(n,e,t){if(t===1n)return 0n;let i=1n;for(n=n%t;e>0n;)BigInt.asUintN(1,e)===1n&&(i=i*n%t),n=n*n%t,e>>=1n;return i}const qa=20,Ba=48,du=4,fu=5,pu=6,Fi=new Uint8Array([Ba,13+qa,Ba,9,pu,5,43,14,3,2,26,fu,0,du,qa]);function wu(n,e){const[t,i]=lo(n),a=new Uint8Array(256);let l=0;a[l]=0,l+=1,a[l]=1,l+=1;const d=a.length-Fi.length-e.length-1;for(;l<d;)a[l]=255,l+=1;a[l]=0,l+=1,a.set(Fi,l),l+=Fi.length,a.set(e,l);const y=hu(os(a,0,a.length),i,t);return cs(a,0,a.length,y,!1),a}var Y;(function(n){n[n.Auth=1213486401]="Auth",n[n.Close=1163086915]="Close",n[n.Connect=1314410051]="Connect",n[n.Okay=1497451343]="Okay",n[n.Open=1313165391]="Open",n[n.Write=1163154007]="Write"})(Y||(Y={}));const ri=new K({littleEndian:!0}).uint32("command").uint32("arg0").uint32("arg1").uint32("payloadLength").uint32("checksum").int32("magic");new K({littleEndian:!0}).concat(ri).uint8Array("payload",{lengthField:"payloadLength"});function ho(n){return n.reduce((e,t)=>e+t,0)}class gu extends bs{constructor(){const e=new Uint8Array(ri.size);super({transform:async(t,i)=>{await t.tryConsume(async a=>{const l=a;l.payloadLength=l.payload.length,await be.ReadableStream.enqueue(i,ri.serialize(l,e)),l.payloadLength&&await be.ReadableStream.enqueue(i,l.payload)})}})}}var gn;(function(n){n[n.Token=1]="Token",n[n.Signature=2]="Signature",n[n.PublicKey=3]="PublicKey"})(gn||(gn={}));const yu=async function*(n,e){for await(const t of n.iterateKeys()){const i=await e();if(i.arg0!==gn.Token)return;const a=wu(t.buffer,i.payload);yield{command:Y.Auth,arg0:gn.Signature,arg1:0,payload:a}}},mu=async function*(n,e){var v;if((await e()).arg0!==gn.Token)return;let i;for await(const h of n.iterateKeys()){i=h;break}i||(i=await n.generateKey());const a=uo(),[l]=to(a),d=(v=i.name)!=null&&v.length?Ce(i.name):Ne,y=new Uint8Array(l+(d.length?d.length+1:0)+1);uu(i.buffer,y),kl(y.subarray(0,a),y),d.length&&(y[l]=32,y.set(d,l+1)),yield{command:Y.Auth,arg0:gn.PublicKey,arg1:0,payload:y}},bu=[yu,mu];var rr,hn,Pt,hi,di,fo;class vu{constructor(e,t){m(this,di);L(this,"authenticators");m(this,rr);m(this,hn,new re);m(this,Pt);m(this,hi,()=>u(this,hn).promise);this.authenticators=e,b(this,rr,t)}async process(e){u(this,Pt)||b(this,Pt,q(this,di,fo).call(this)),u(this,hn).resolve(e);const t=await u(this,Pt).next();if(t.done)throw new Error("No authenticator can handle the request");return t.value}dispose(){var e,t;(t=(e=u(this,Pt))==null?void 0:e.return)==null||t.call(e)}}rr=new WeakMap,hn=new WeakMap,Pt=new WeakMap,hi=new WeakMap,di=new WeakSet,fo=async function*(){for(const e of this.authenticators)for await(const t of e(u(this,rr),u(this,hi)))b(this,hn,new re),yield t};var Ct,ir,Je,sr,ar,or,cr,qt,Ue,fi,po;class $a{constructor(e){m(this,fi);m(this,Ct);L(this,"localId");L(this,"remoteId");L(this,"localCreated");L(this,"service");m(this,ir);m(this,Je);m(this,sr);L(this,"writable");m(this,ar,!1);m(this,or,new re);m(this,cr);m(this,qt);m(this,Ue,0);b(this,Ct,e.dispatcher),this.localId=e.localId,this.remoteId=e.remoteId,this.localCreated=e.localCreated,this.service=e.service,b(this,ir,new wn(t=>{b(this,Je,t)})),this.writable=new st.WritableStream({start:t=>{b(this,sr,t),t.signal.addEventListener("abort",()=>{var i;(i=u(this,qt))==null||i.reject(t.signal.reason)})},write:async t=>{const i=t.length,a=u(this,Ct).options.maxPayloadSize;for(let l=0,d=a;l<i;l=d,d+=a){const y=t.subarray(l,d);await q(this,fi,po).call(this,y)}}}),b(this,cr,new Eu(this)),b(this,Ue,e.availableWriteBytes)}get readable(){return u(this,ir)}get closed(){return u(this,or).promise}get socket(){return u(this,cr)}async enqueue(e){if(!u(this,Je).abortSignal.aborted)try{await u(this,Je).enqueue(e)}catch(t){if(u(this,Je).abortSignal.aborted)return;throw t}}ack(e){var t;b(this,Ue,u(this,Ue)+e),(t=u(this,qt))==null||t.resolve()}async close(){var e;if(!u(this,ar)){b(this,ar,!0),(e=u(this,qt))==null||e.reject(new Error("Socket closed"));try{u(this,sr).error(new Error("Socket closed"))}catch{}await u(this,Ct).sendPacket(Y.Close,this.localId,this.remoteId,Ne)}}dispose(){try{u(this,Je).close()}catch{}u(this,or).resolve()}}Ct=new WeakMap,ir=new WeakMap,Je=new WeakMap,sr=new WeakMap,ar=new WeakMap,or=new WeakMap,cr=new WeakMap,qt=new WeakMap,Ue=new WeakMap,fi=new WeakSet,po=async function(e){const t=e.length;for(;u(this,Ue)<t;){const i=new re;b(this,qt,i),await i.promise}u(this,Ue)===1/0?b(this,Ue,-1):b(this,Ue,u(this,Ue)-t),await u(this,Ct).sendPacket(Y.Write,this.localId,this.remoteId,e)};var ge;class Eu{constructor(e){m(this,ge);b(this,ge,e)}get localId(){return u(this,ge).localId}get remoteId(){return u(this,ge).remoteId}get localCreated(){return u(this,ge).localCreated}get service(){return u(this,ge).service}get readable(){return u(this,ge).readable}get writable(){return u(this,ge).writable}get closed(){return u(this,ge).closed}close(){return u(this,ge).close()}}ge=new WeakMap;var Xe,_e,Bt,lr,dn,$t,ur,Z,wo,go,ls,yo,mo,us;class Su{constructor(e,t){m(this,Z);m(this,Xe,new il(1));m(this,_e,new Map);m(this,Bt);L(this,"options");m(this,lr,!1);m(this,dn,new re);m(this,$t,new Map);m(this,ur,new Lr);this.options=t,this.options.initialDelayedAckBytes<0&&(this.options.initialDelayedAckBytes=0),e.readable.pipeTo(new qe({write:async i=>{switch(i.command){case Y.Close:await q(this,Z,wo).call(this,i);break;case Y.Okay:q(this,Z,go).call(this,i);break;case Y.Open:await q(this,Z,yo).call(this,i);break;case Y.Write:await q(this,Z,mo).call(this,i);break;default:throw new Error(`Unknown command: ${i.command.toString(16)}`)}}}),{preventCancel:t.preserveConnection??!1,signal:u(this,ur).signal}).then(()=>{q(this,Z,us).call(this)},i=>{u(this,lr)||u(this,dn).reject(i),q(this,Z,us).call(this)}),b(this,Bt,e.writable.getWriter())}get disconnected(){return u(this,dn).promise}async createSocket(e){this.options.appendNullToServiceString&&(e+="\0");const[t,i]=u(this,Xe).add();await this.sendPacket(Y.Open,t,this.options.initialDelayedAckBytes,e);const{remoteId:a,availableWriteBytes:l}=await i,d=new $a({dispatcher:this,localId:t,remoteId:a,localCreated:!0,service:e,availableWriteBytes:l});return u(this,_e).set(t,d),d.socket}addReverseTunnel(e,t){u(this,$t).set(e,t)}removeReverseTunnel(e){u(this,$t).delete(e)}clearReverseTunnels(){u(this,$t).clear()}async sendPacket(e,t,i,a){if(typeof a=="string"&&(a=Ce(a)),a.length>this.options.maxPayloadSize)throw new TypeError("payload too large");await be.WritableStream.write(u(this,Bt),{command:e,arg0:t,arg1:i,payload:a,checksum:this.options.calculateChecksum?ho(a):0,magic:e^4294967295})}async close(){await Promise.all(Array.from(u(this,_e).values(),e=>e.close())),b(this,lr,!0),u(this,ur).abort(),this.options.preserveConnection?u(this,Bt).releaseLock():await u(this,Bt).close()}}Xe=new WeakMap,_e=new WeakMap,Bt=new WeakMap,lr=new WeakMap,dn=new WeakMap,$t=new WeakMap,ur=new WeakMap,Z=new WeakSet,wo=async function(e){if(e.arg0===0&&u(this,Xe).reject(e.arg1,new Error("Socket open failed")))return;const t=u(this,_e).get(e.arg1);if(t){await t.close(),t.dispose(),u(this,_e).delete(e.arg1);return}},go=function(e){let t;if(this.options.initialDelayedAckBytes!==0){if(e.payload.length!==4)throw new Error("Invalid OKAY packet. Payload size should be 4");t=yi(e.payload,0)}else{if(e.payload.length!==0)throw new Error("Invalid OKAY packet. Payload size should be 0");t=1/0}if(u(this,Xe).resolve(e.arg1,{remoteId:e.arg0,availableWriteBytes:t}))return;const i=u(this,_e).get(e.arg1);if(i){i.ack(t);return}this.sendPacket(Y.Close,e.arg1,e.arg0,Ne)},ls=function(e,t,i){let a;return this.options.initialDelayedAckBytes!==0?(a=new Uint8Array(4),zc(a,0,i)):a=Ne,this.sendPacket(Y.Okay,e,t,a)},yo=async function(e){const[t]=u(this,Xe).add();u(this,Xe).resolve(t,void 0);const i=e.arg0;let a=e.arg1,l=zt(e.payload);if(l.endsWith("\0")&&(l=l.substring(0,l.length-1)),this.options.initialDelayedAckBytes===0){if(a!==0)throw new Error("Invalid OPEN packet. arg1 should be 0");a=1/0}else if(a===0)throw new Error("Invalid OPEN packet. arg1 should be greater than 0");const d=u(this,$t).get(l);if(!d){await this.sendPacket(Y.Close,0,i,Ne);return}const y=new $a({dispatcher:this,localId:t,remoteId:i,localCreated:!1,service:l,availableWriteBytes:a});try{await d(y.socket),u(this,_e).set(t,y),await q(this,Z,ls).call(this,t,i,this.options.initialDelayedAckBytes)}catch{await this.sendPacket(Y.Close,0,i,Ne)}},mo=async function(e){const t=u(this,_e).get(e.arg1);if(!t)throw new Error(`Unknown local socket id: ${e.arg1}`);let i=!1;const a=[(async()=>{await t.enqueue(e.payload),await q(this,Z,ls).call(this,e.arg1,e.arg0,e.payload.length),i=!0})()];this.options.readTimeLimit&&a.push((async()=>{if(await sl(this.options.readTimeLimit),!i)throw new Error(`readable of \`${t.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`)})()),await Promise.race(a)},us=function(){for(const e of u(this,_e).values())e.dispose();u(this,dn).resolve()};const xu=16777217,Ra=[R.ShellV2,R.Cmd,R.StatV2,R.ListV2,R.FixedPushMkdir,"apex",R.Abb,"fixed_push_symlink_timestamp",R.AbbExec,"remount_shell","track_app",R.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send",R.DelayedAck],Lu=32*1024*1024;var hr,Te,dr,fr,fn,pr;const Cs=class Cs{constructor({serial:e,connection:t,version:i,banner:a,features:l=Ra,initialDelayedAckBytes:d,...y}){m(this,hr);m(this,Te);m(this,dr);m(this,fr);m(this,fn);m(this,pr);if(b(this,dr,e),b(this,hr,t),b(this,fn,ni.parse(a)),b(this,pr,l),l.includes(R.DelayedAck)){if(d<=0)throw new TypeError("`initialDelayedAckBytes` must be greater than 0 when DelayedAck feature is enabled.");u(this,fn).features.includes(R.DelayedAck)||(d=0)}else d=0;let v,h;i>=xu?(v=!1,h=!1):(v=!0,h=!0),b(this,Te,new Su(t,{calculateChecksum:v,appendNullToServiceString:h,initialDelayedAckBytes:d,...y})),b(this,fr,i)}static async authenticate({serial:e,connection:t,credentialStore:i,authenticators:a=bu,features:l=Ra,initialDelayedAckBytes:d=Lu,...y}){let v=16777217,h=1024*1024;const _=new re,B=new vu(a,i),W=new Lr,oe=t.readable.pipeTo(new qe({async write(U){switch(U.command){case Y.Connect:v=Math.min(v,U.arg0),h=Math.min(h,U.arg1),_.resolve(zt(U.payload));break;case Y.Auth:{const lt=await B.process(U);await bn(lt);break}}}}),{preventCancel:!0,signal:W.signal}).then(()=>{_.reject(new Error("Connection closed unexpectedly"))},U=>{_.reject(U)}),Fe=t.writable.getWriter();async function bn(U){U.checksum=ho(U.payload),U.magic=U.command^4294967295,await be.WritableStream.write(Fe,U)}const ct=l.slice();if(d<=0){const U=l.indexOf(R.DelayedAck);U!==-1&&ct.splice(U,1)}let Wt;try{await bn({command:Y.Connect,arg0:v,arg1:h,payload:Ce(`host::features=${ct.join(",")}`)}),Wt=await _.promise}finally{W.abort(),Fe.releaseLock(),await oe}return new Cs({serial:e,connection:t,version:v,maxPayloadSize:h,banner:Wt,features:ct,initialDelayedAckBytes:d,...y})}get connection(){return u(this,hr)}get serial(){return u(this,dr)}get protocolVersion(){return u(this,fr)}get maxPayloadSize(){return u(this,Te).options.maxPayloadSize}get banner(){return u(this,fn)}get disconnected(){return u(this,Te).disconnected}get clientFeatures(){return u(this,pr)}connect(e){return u(this,Te).createSocket(e)}addReverseTunnel(e,t){return t||(t=`localabstract:reverse_${Math.random().toString().substring(2)}`),u(this,Te).addReverseTunnel(t,e),t}removeReverseTunnel(e){u(this,Te).removeReverseTunnel(e)}clearReverseTunnels(){u(this,Te).clearReverseTunnels()}close(){return u(this,Te).close()}};hr=new WeakMap,Te=new WeakMap,dr=new WeakMap,fr=new WeakMap,fn=new WeakMap,pr=new WeakMap;let hs=Cs;const ku=[R.ShellV2,R.Cmd,R.StatV2,R.ListV2,R.FixedPushMkdir,"apex",R.Abb,"fixed_push_symlink_timestamp",R.AbbExec,"remount_shell","track_app",R.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send"];var Ze,wr,gr;class _u{constructor(e,t,i,a){m(this,Ze);L(this,"serial");L(this,"transportId");L(this,"maxPayloadSize",1*1024*1024);L(this,"banner");m(this,wr,new re);m(this,gr,new Lr);L(this,"disconnected");b(this,Ze,e),this.serial=t,this.banner=i,this.transportId=a,this.disconnected=Promise.race([u(this,wr).promise,e.waitFor({transportId:a},"disconnect",{signal:u(this,gr).signal,unref:!0})])}get clientFeatures(){return ku}async connect(e){return await u(this,Ze).createDeviceConnection({transportId:this.transportId},e)}async addReverseTunnel(e,t){return await u(this,Ze).connector.addReverseTunnel(e,t)}async removeReverseTunnel(e){await u(this,Ze).connector.removeReverseTunnel(e)}async clearReverseTunnels(){await u(this,Ze).connector.clearReverseTunnels()}close(){u(this,wr).resolve(),u(this,gr).abort()}}Ze=new WeakMap,wr=new WeakMap,gr=new WeakMap;const Tu=Ce("OKAY"),bo=Ce("FAIL");var et,Rt,Ot;class Oa{constructor(e){m(this,et);m(this,Rt);m(this,Ot);b(this,et,e),b(this,Rt,new kr(e.readable)),b(this,Ot,e.writable.getWriter())}readExactly(e){return u(this,Rt).readExactly(e)}readString(){return We.try(()=>this.readExactly(4)).then(e=>{const t=In(e);return t===0?Ne:this.readExactly(t)}).then(e=>zt(e)).valueOrPromise()}async writeString(e){const t=Ce(e),i=new Uint8Array(4+t.length);Il(i,0,t.length),i.set(t,4),await u(this,Ot).write(i)}async readOkay(){const e=await this.readExactly(4);if(!Yr(e,Tu)){if(Yr(e,bo)){const t=await this.readString();throw new Error(t)}throw new Error(`Unexpected response: ${zt(e)}`)}}release(){return u(this,Ot).releaseLock(),{readable:u(this,Rt).release(),writable:u(this,et).writable,closed:u(this,et).closed,close:()=>u(this,et).close()}}async dispose(){await u(this,Rt).cancel().catch(ts),await u(this,Ot).close().catch(ts);try{await u(this,et).close()}catch{}}}et=new WeakMap,Rt=new WeakMap,Ot=new WeakMap;const mt=class mt{constructor(e){L(this,"connector");L(this,"wireless",new mt.WirelessCommands(this));L(this,"mDns",new mt.MDnsCommands(this));this.connector=e}async createConnection(e,t){const i=await this.connector.connect(t),a=new Oa(i);try{await a.writeString(e)}catch(l){throw await a.dispose(),l}try{return await Aa(()=>a.readOkay(),t==null?void 0:t.signal),a}catch(l){throw await a.dispose(),l}}async getVersion(){const e=await this.createConnection("host:version");try{const t=In(await e.readExactly(4));return In(await e.readExactly(t))}finally{await e.dispose()}}async validateVersion(){const e=await this.getVersion();if(e!==mt.VERSION)throw new Error(`adb server version (${e}) doesn't match this client (${mt.VERSION})`)}async killServer(){await(await this.createConnection("host:kill")).dispose()}async getServerFeatures(){const e=await this.createConnection("host:host-features");try{return(await e.readString()).split(",")}finally{await e.dispose()}}parseDeviceList(e){const t=[];for(const i of e.split(`
|
|
7
|
+
`)){if(!i)continue;const a=i.split(" ").filter(Boolean),l=a[0],d=a[1];if(d!=="device"&&d!=="unauthorized")continue;let y,v,h,_;for(let B=2;B<a.length;B+=1){const[W,oe]=a[B].split(":");switch(W){case"product":y=oe;break;case"model":v=oe;break;case"device":h=oe;break;case"transport_id":_=BigInt(oe);break}}if(!_)throw new Error(`No transport id for device ${l}`);t.push({serial:l,authenticating:d==="unauthorized",product:y,model:v,device:h,transportId:_})}return t}async getDevices(){const e=await this.createConnection("host:devices-l");try{const t=await e.readString();return this.parseDeviceList(t)}finally{await e.dispose()}}async*trackDevices(e){const t=await this.createConnection("host:track-devices-l");try{for(;;){const i=await Aa(async()=>await t.readString(),e);yield this.parseDeviceList(i)}}catch(i){if(i===(e==null?void 0:e.reason))return}finally{await t.dispose()}}formatDeviceService(e,t){if(!e)return`host:${t}`;if("transportId"in e)return`host-transport-id:${e.transportId}:${t}`;if("serial"in e)return`host-serial:${e.serial}:${t}`;if("usb"in e)return`host-usb:${t}`;if("tcp"in e)return`host-local:${t}`;throw new TypeError("Invalid device selector")}async reconnectDevice(e){const t=await this.createConnection(e==="offline"?"host:reconnect-offline":this.formatDeviceService(e,"reconnect"));try{await t.readString()}finally{await t.dispose()}}async getDeviceFeatures(e){const t=await this.createDeviceConnection(e,"host:features"),i=new Oa(t);try{const l=(await i.readString()).split(",");return{transportId:t.transportId,features:l}}finally{await i.dispose()}}async createDeviceConnection(e,t){await this.validateVersion();let i,a;if(!e)i="host:tport:any";else if("transportId"in e)i=`host:transport-id:${e.transportId}`,a=e.transportId;else if("serial"in e)i=`host:tport:serial:${e.serial}`;else if("usb"in e)i="host:tport:usb";else if("tcp"in e)i="host:tport:local";else throw new TypeError("Invalid device selector");const l=await this.createConnection(i);try{await l.writeString(t)}catch(d){throw await l.dispose(),d}try{if(a===void 0){const y=await l.readExactly(8);a=Uc(y,0)}await l.readOkay();const d=l.release();return{transportId:a,service:t,readable:d.readable,writable:new es(d.writable).bePipedThroughFrom(new st.UnwrapStream),get closed(){return d.closed},async close(){await d.close()}}}catch(d){throw await l.dispose(),d}}async waitFor(e,t,i){let a;if(!e)a="any";else if("transportId"in e)a="any";else if("serial"in e)a="any";else if("usb"in e)a="usb";else if("tcp"in e)a="local";else throw new TypeError("Invalid device selector");const l=this.formatDeviceService(e,`wait-for-${a}-${t}`),d=await this.createConnection(l,i);try{await d.readOkay()}finally{await d.dispose()}}async createTransport(e){const{transportId:t,features:i}=await this.getDeviceFeatures(e),l=(await this.getDevices()).find(y=>y.transportId===t),d=new ni(l==null?void 0:l.product,l==null?void 0:l.model,l==null?void 0:l.device,i);return new _u(this,(l==null?void 0:l.serial)??"",d,t)}};L(mt,"VERSION",41);let ii=mt;async function Aa(n,...e){const t=new re;function i(){t.reject(this.reason)}try{for(const a of e)if(a){if(a.aborted)throw a.reason;a.addEventListener("abort",i)}return await Promise.race([n(),t.promise])}finally{for(const a of e)a&&a.removeEventListener("abort",i)}}(function(n){var d,y;class e extends Error{constructor(h){super(h),this.name="NetworkError"}}n.NetworkError=e;class t extends Error{constructor(h){super(h),this.name="UnauthorizedError"}}n.UnauthorizedError=t;class i extends Error{constructor(h){super(h),this.name="AlreadyConnectedError"}}n.AlreadyConnectedError=i;class a{constructor(h){m(this,d);b(this,d,h)}async pair(h,_){const B=await u(this,d).createConnection(`host:pair:${_}:${h}`);try{const W=await B.readExactly(4);if(Yr(W,bo))throw new Error(await B.readString());const oe=In(W);await B.readExactly(oe)}finally{await B.dispose()}}async connect(h){const _=await u(this,d).createConnection(`host:connect:${h}`);try{const B=await _.readString();switch(B){case`already connected to ${h}`:throw new n.AlreadyConnectedError(B);case`failed to connect to ${h}`:case`failed to authenticate to ${h}`:throw new n.UnauthorizedError(B);case`connected to ${h}`:return;default:throw new n.NetworkError(B)}}finally{await _.dispose()}}async disconnect(h){const _=await u(this,d).createConnection(`host:disconnect:${h}`);try{await _.readString()}finally{await _.dispose()}}}d=new WeakMap,n.WirelessCommands=a;class l{constructor(h){m(this,y);b(this,y,h)}async check(){const h=await u(this,y).createConnection("host:mdns:check");try{return!(await h.readString()).startsWith("ERROR:")}finally{await h.dispose()}}async getServices(){const h=await u(this,y).createConnection("host:mdns:services");try{return(await h.readString()).split(`
|
|
8
|
+
`).filter(Boolean).map(B=>{const W=B.split(" ");return{name:W[0],service:W[1],address:W[2]}})}finally{await h.dispose()}}}y=new WeakMap,n.MDnsCommands=l})(ii||(ii={}));function vo(n,e){return typeof n=="object"&&n!==null&&"name"in n&&n.name===e}function Iu(n,e){return e.some(t=>n.interfaceClass===t.classCode&&n.interfaceSubclass===t.subclassCode&&n.interfaceProtocol===t.protocolCode)}function Eo(n,e){for(const t of n.configurations)for(const i of t.interfaces)for(const a of i.alternates)if(Iu(a,e))return{configuration:t,interface_:i,alternate:a};throw new TypeError("No matched alternate interface found")}function Ma(n){return n.toString(16).padStart(4,"0")}function So(n){return n.serialNumber?n.serialNumber:Ma(n.vendorId)+"x"+Ma(n.productId)}const ds={classCode:255,subclassCode:66,protocolCode:1};function Du(n){if(n.length===0)throw new TypeError("No endpoints given");let e,t;for(const i of n)switch(i.direction){case"in":if(e=i,t)return{inEndpoint:e,outEndpoint:t};break;case"out":if(t=i,e)return{inEndpoint:e,outEndpoint:t};break}throw e?t?new Error("unreachable"):new TypeError("No output endpoint found."):new TypeError("No input endpoint found.")}var yr,tt;class Nu{constructor(e){m(this,yr);m(this,tt);b(this,yr,e),b(this,tt,0)}get position(){return u(this,tt)}readExactly(e){const t=u(this,yr).subarray(u(this,tt),u(this,tt)+e);return b(this,tt,u(this,tt)+e),t}}yr=new WeakMap,tt=new WeakMap;var At,nt,mr,br,vr,pi,xo;class Pu{constructor(e,t,i,a){m(this,pi);m(this,At);m(this,nt);m(this,mr);m(this,br);m(this,vr);b(this,At,e),b(this,nt,t),b(this,mr,i);let l=!1;const d=new fl({close:async()=>{try{l=!0,await e.raw.close()}catch{}},dispose:()=>{l=!0,a.removeEventListener("disconnect",y)}});function y(h){h.device===e.raw&&d.dispose().catch(no)}a.addEventListener("disconnect",y),b(this,br,d.wrapReadable(new Ut({pull:async h=>{const _=await q(this,pi,xo).call(this);_?h.enqueue(_):h.close()}},{highWaterMark:0})));const v=i.packetSize-1;b(this,vr,wl(d.createWritable(new st.WritableStream({write:async h=>{try{await e.raw.transferOut(i.endpointNumber,h),v&&(h.length&v)===0&&await e.raw.transferOut(i.endpointNumber,Ne)}catch(_){if(l)return;throw _}}})),new gu))}get device(){return u(this,At)}get inEndpoint(){return u(this,nt)}get outEndpoint(){return u(this,mr)}get readable(){return u(this,br)}get writable(){return u(this,vr)}}At=new WeakMap,nt=new WeakMap,mr=new WeakMap,br=new WeakMap,vr=new WeakMap,pi=new WeakSet,xo=async function(){try{for(;;){const e=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,u(this,nt).packetSize);if(e.data.byteLength!==24)continue;const t=new Uint8Array(e.data.buffer),i=new Nu(t),a=ri.deserialize(i);if(a.magic===(a.command^4294967295)){if(a.payloadLength!==0){const l=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,a.payloadLength);a.payload=new Uint8Array(l.data.buffer)}else a.payload=Ne;return a}}}catch(e){if(vo(e,"NetworkError")){if(await new Promise(t=>{setTimeout(()=>{t()},100)}),closed)return;throw e}throw e}};var Er,Sr,le,xr,wi,Lo;class za{constructor(e,t=[ds],i){m(this,wi);m(this,Er);m(this,Sr);m(this,le);m(this,xr);b(this,le,e),b(this,xr,So(e)),b(this,Er,t),b(this,Sr,i)}get raw(){return u(this,le)}get serial(){return u(this,xr)}get name(){return u(this,le).productName}async connect(){const[e,t]=await q(this,wi,Lo).call(this);return new Pu(this,e,t,u(this,Sr))}}Er=new WeakMap,Sr=new WeakMap,le=new WeakMap,xr=new WeakMap,wi=new WeakSet,Lo=async function(){var d;u(this,le).opened||await u(this,le).open();const{configuration:e,interface_:t,alternate:i}=Eo(u(this,le),u(this,Er));((d=u(this,le).configuration)==null?void 0:d.configurationValue)!==e.configurationValue&&await u(this,le).selectConfiguration(e.configurationValue),t.claimed||await u(this,le).claimInterface(t.interfaceNumber),t.alternate.alternateSetting!==i.alternateSetting&&await u(this,le).selectAlternateInterface(t.interfaceNumber,i.alternateSetting);const{inEndpoint:a,outEndpoint:l}=Du(i.endpoints);return[a,l]};var rt;const gi=class gi{constructor(e){m(this,rt);b(this,rt,e)}async requestDevice(e={}){if(!e.filters)e.filters=[ds];else if(e.filters.length===0)throw new TypeError("filters must not be empty");try{const t=await u(this,rt).requestDevice(e);return new za(t,e.filters,u(this,rt))}catch(t){if(vo(t,"NotFoundError"))return;throw t}}async getDevices(e=[ds]){if(e.length===0)throw new TypeError("filters must not be empty");return(await u(this,rt).getDevices()).filter(i=>{for(const a of e)if(!("vendorId"in a&&i.vendorId!==a.vendorId)&&!("productId"in a&&i.productId!==a.productId)&&!("serialNumber"in a&&So(i)!==a.serialNumber))try{return Eo(i,e),!0}catch{continue}return!1}).map(i=>new za(i,e,u(this,rt)))}};rt=new WeakMap,L(gi,"BROWSER",typeof globalThis.navigator<"u"&&globalThis.navigator.usb?new gi(globalThis.navigator.usb):void 0);let fs=gi;function ko(){return new Promise((n,e)=>{const t=indexedDB.open("Tango",1);t.onerror=()=>{e(t.error)},t.onupgradeneeded=()=>{t.result.createObjectStore("Authentication",{autoIncrement:!0})},t.onsuccess=()=>{const i=t.result;n(i)}})}async function Cu(n){const e=await ko();return new Promise((t,i)=>{const a=e.transaction("Authentication","readwrite"),d=a.objectStore("Authentication").add(n);d.onerror=()=>{i(d.error)},d.onsuccess=()=>{t()},a.onerror=()=>{i(a.error)},a.oncomplete=()=>{e.close()}})}async function qu(){const n=await ko();return new Promise((e,t)=>{const i=n.transaction("Authentication","readonly"),l=i.objectStore("Authentication").getAll();l.onerror=()=>{t(l.error)},l.onsuccess=()=>{e(l.result)},i.onerror=()=>{t(i.error)},i.oncomplete=()=>{n.close()}})}var pn;class Bu{constructor(e="Tango"){m(this,pn);b(this,pn,e)}async generateKey(){const{privateKey:e}=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-1"},!0,["sign","verify"]),t=new Uint8Array(await crypto.subtle.exportKey("pkcs8",e));return await Cu(t),{buffer:t,name:`${u(this,pn)}@${globalThis.location.hostname}`}}async*iterateKeys(){for(const e of await qu())yield{buffer:e,name:`${u(this,pn)}@${globalThis.location.hostname}`}}}pn=new WeakMap;const Ht=fs.BROWSER,$u=new Bu;class Ru{constructor(){this.adb=null,this.device=null,this.packageName="",this.dbName="",this.dbPath="",this.sqlite3Path="",this.mode="webusb",this.bridgeUrl="",this.bridgeSerial="",this._runAsWorks=null,this._appDataDir=""}async connectBridge(e=15555){const t=[];(location.hostname==="127.0.0.1"||location.hostname==="localhost")&&t.push(location.origin),t.push(`http://127.0.0.1:${e}`);const a=new Set;for(const l of t)if(!a.has(l)){a.add(l);try{if((await(await fetch(`${l}/api/ping`,{signal:AbortSignal.timeout(2e3)})).json()).ok)return this.mode="bridge",this.bridgeUrl=l,!0}catch{}}return!1}async _bridgeShell(e){const t=await fetch(`${this.bridgeUrl}/api/shell`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:e,serial:this.bridgeSerial||void 0})}),i=await t.json();if(!t.ok)throw new Error(i.error||"Bridge shell command failed");return(i.output||"").replace(/\r\n/g,`
|
|
9
|
+
`).trimEnd()}async _bridgeGetDevices(){const e=await fetch(`${this.bridgeUrl}/api/devices`),t=await e.json();if(!e.ok)throw new Error(t.error||"Bridge devices request failed");return t.devices||[]}async requestDevice(){if(!Ht)throw new Error("WebUSB is not supported in this browser. Use Chrome or Edge.");const e=await Ht.requestDevice();if(!e)throw new Error("No device selected.");return await this._connectDevice(e),this.getDeviceInfo()}async getDevices(){return this.mode==="bridge"?this._bridgeGetDevices():Ht?(await Ht.getDevices()).map(t=>({serial:t.serial,name:t.name,display_name:`${t.name||t.serial} (${t.serial})`})):[]}async connectBySerial(e){if(this.mode==="bridge")return this.bridgeSerial=e,this.getDeviceInfo();if(!Ht)throw new Error("WebUSB not supported.");const i=(await Ht.getDevices()).find(a=>a.serial===e);if(!i)throw new Error(`Device ${e} not found.`);return await this._connectDevice(i),this.getDeviceInfo()}async _connectDevice(e){var a;await this.disconnect();let t;try{t=await e.connect()}catch(l){throw(a=l==null?void 0:l.message)!=null&&a.includes("claimInterface")?new Error("Cannot claim USB device — another program (likely ADB) is using it. Run 'adb kill-server' in your terminal, then retry."):l}const i=await hs.authenticate({serial:e.serial,connection:t,credentialStore:$u});this.adb=new ru(i),this.device=e}async disconnect(){if(this.mode==="bridge"){this.bridgeSerial="",this.bridgeUrl="",this.mode="webusb";return}if(this.adb){try{await this.adb.close()}catch{}this.adb=null,this.device=null}}checkConnection(){const e=this.mode==="bridge"?!!this.bridgeUrl:!!this.adb;return{connected:e,device:e?this.getDeviceInfo():null,package:this.packageName,database:this.dbName}}getDeviceInfo(){return this.mode==="bridge"?this.bridgeSerial?{serial:this.bridgeSerial,name:this.bridgeSerial,display_name:`${this.bridgeSerial} (ADB Bridge)`}:null:this.device?{serial:this.device.serial,name:this.device.name,display_name:`${this.device.name||this.device.serial} (${this.device.serial})`}:null}setPackage(e){this.packageName=e,this.dbName="",this.dbPath="",this.sqlite3Path="",this._runAsWorks=null,this._appDataDir=""}setDatabase(e,t){this.dbName=e,this.dbPath=t||""}async shell(e){if(this.mode==="bridge")return this._bridgeShell(e);if(!this.adb)throw new Error("Not connected to a device.");const t=await this.adb.subprocess.spawnAndWaitLegacy(e);let i;return typeof t=="string"?i=t:t instanceof Uint8Array?i=new TextDecoder().decode(t):(t==null?void 0:t.stdout)!==void 0?i=typeof t.stdout=="string"?t.stdout:new TextDecoder().decode(t.stdout):i=String(t),i.replace(/\r\n/g,`
|
|
10
|
+
`).trimEnd()}async runAs(e){if(this._runAsWorks===null)try{await this.shell(`run-as ${this.packageName} id`),this._runAsWorks=!0}catch{this._runAsWorks=!1;try{const i=(await this.shell(`dumpsys package ${this.packageName} | grep dataDir | head -1`)).match(/dataDir=(.+)/);this._appDataDir=i?i[1].trim():`/data/data/${this.packageName}`}catch{this._appDataDir=`/data/data/${this.packageName}`}}return this._runAsWorks?this.shell(`run-as ${this.packageName} ${e}`):this.shell(`cd ${this._appDataDir} && ${e}`)}async getPackages(){let i=(await this.shell('for p in $(pm list packages --user 0 -3 2>/dev/null | tr -d "\\r" | sed "s/package://"); do run-as $p id 2>/dev/null 1>/dev/null && echo $p; done')).split(`
|
|
11
|
+
`).map(a=>a.trim()).filter(Boolean);return i.length===0&&(i=(await this.shell('pm list packages -3 2>/dev/null | tr -d "\\r" | sed "s/package://"')).split(`
|
|
12
|
+
`).map(l=>l.trim()).filter(Boolean)),i.sort(),i}async getDatabases(e){if(!(e||this.packageName))throw new Error("No package selected.");const i=["databases","files","files/SQLite"],a=[],l=new Set;for(const d of i)try{const y=await this.runAs(`ls ${d} 2>/dev/null`);for(const v of y.split(`
|
|
13
|
+
`)){const h=v.trim();h&&(h.endsWith(".db")||h.endsWith(".sqlite")||h.endsWith(".sqlite3"))&&(l.has(h)||(l.add(h),a.push({name:h,path:`${d}/${h}`})))}}catch{}return a}async searchDatabases(e,t){if(!(e||this.packageName))throw new Error("No package selected.");const a=await this.runAs('find . -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null'),l=(t||"").toLowerCase(),d=[];for(const y of a.split(`
|
|
14
|
+
`)){let v=y.trim();if(!v)continue;v.startsWith("./")&&(v=v.slice(2));const h=v.split("/").pop();h.endsWith("-journal")||h.endsWith("-wal")||h.endsWith("-shm")||(!l||h.toLowerCase().includes(l)||v.toLowerCase().includes(l))&&d.push({name:h,path:v})}return d.sort((y,v)=>y.name.toLowerCase().localeCompare(v.name.toLowerCase())),d}async ensureSqlite3(){if(this.sqlite3Path)return this.sqlite3Path;try{const t=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(t.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}const e=["/system/bin/sqlite3","/system/xbin/sqlite3","/data/local/tmp/sqlite3"];for(const t of e)try{const i=await this.shell(`${t} -version 2>&1`);if(/^3\.\d+/.test(i.trim())){try{await this.runAs(`cp ${t} ./sqlite3`),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path=t,this.sqlite3Path}}catch{}if(this.mode==="bridge"&&this.bridgeUrl)try{const t=await fetch(`${this.bridgeUrl}/api/push-sqlite3`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:this.bridgeSerial||void 0})}),i=await t.json();if(t.ok&&i.ok){try{await this.runAs("cp /data/local/tmp/sqlite3 ./sqlite3"),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path="/data/local/tmp/sqlite3",this.sqlite3Path}}catch{}throw new Error("sqlite3 not found on device. Ensure a sqlite3 binary is available at /system/bin/sqlite3 or /data/local/tmp/sqlite3.")}async findDatabasePath(){if(this.dbPath)return this.dbPath;const e=[`databases/${this.dbName}`,`files/${this.dbName}`,`files/SQLite/${this.dbName}`];for(const t of e)try{if((await this.runAs(`ls ${t}`)).includes(this.dbName))return this.dbPath=t,t}catch{}throw new Error(`Database ${this.dbName} not found on device.`)}async _sqliteJson(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -json "${a}"`,d=await this.runAs(l);if(!d)return[];try{const y=JSON.parse(d);return Array.isArray(y)?y:[]}catch{return this._sqliteFallback(e,t,i)}}async _sqliteFallback(e,t,i){const a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -header -separator "|" "${a}"`,y=(await this.runAs(l)).split(`
|
|
15
|
+
`).filter(Boolean);if(y.length===0)return[];const v=y[0].split("|").map(_=>_.trim()),h=[];for(let _=1;_<y.length;_++){const B=y[_].split("|").map(W=>W.trim());if(B.length===v.length){const W={};v.forEach((oe,Fe)=>W[oe]=B[Fe]),h.push(W)}}return h}async _sqliteExec(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} "${a}"`;await this.runAs(l)}_isWriteQuery(e){const t=e.trim().toUpperCase();return["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(i=>t.startsWith(i))}async getTables(){return(await this._sqliteJson("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")).map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){return this._sqliteJson(`PRAGMA table_info(${e});`)}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const l=await this._sqliteJson(`SELECT * FROM ${e} LIMIT ${t} OFFSET ${i};`),d=await this._sqliteJson(`SELECT COUNT(*) as count FROM ${e};`),y=d.length?Number(d[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){const i=e.trim();if(this._isWriteQuery(i))return await this._sqliteExec(i),{columns:[],rows:[],row_count:0};let a=i;t&&!i.toUpperCase().includes("LIMIT")&&i.toUpperCase().startsWith("SELECT")&&(a=`${i.replace(/;$/,"")} LIMIT ${t};`);const l=await this._sqliteJson(a);return{columns:l.length?Object.keys(l[0]):[],rows:l,row_count:l.length}}async checkDatabaseExists(){try{return await this.findDatabasePath(),!0}catch{return!1}}}function Ou(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Vi={exports:{}},Ua;function Au(){return Ua||(Ua=1,(function(n,e){var t=void 0,i=function(a){return t||(t=new Promise(function(l,d){var pa,wa;var y=typeof a<"u"?a:{},v=y.onAbort;y.onAbort=function(r){d(new Error(r)),v&&v(r)},y.postRun=y.postRun||[],y.postRun.push(function(){l(y)}),n=void 0;var h;h||(h=typeof y<"u"?y:{});var _=!!globalThis.window,B=!!globalThis.WorkerGlobalScope;h.onRuntimeInitialized=function(){function r(w,S){switch(typeof S){case"boolean":kc(w,S?1:0);break;case"number":Sc(w,S);break;case"string":xc(w,S,-1,-1);break;case"object":if(S===null)Ea(w);else if(S.length!=null){var k=Ur(S.length);Q.set(S,k),Lc(w,k,S.length,-1),Tn(k)}else jr(w,"Wrong API use : tried to return a value of an unknown type ("+S+").",-1);break;default:Ea(w)}}function s(w,S){for(var k=[],T=0;T<w;T+=1){var C=Be(S+4*T,"i32"),$=yc(C);if($===1||$===2)C=Ec(C);else if($===3)C=bc(C);else if($===4){$=C,C=mc($),$=vc($);for(var Ee=new Uint8Array(C),fe=0;fe<C;fe+=1)Ee[fe]=Q[$+fe];C=Ee}else C=null;k.push(C)}return k}function o(w,S){this.Qa=w,this.db=S,this.Oa=1,this.yb=[]}function c(w,S){if(this.db=S,this.ob=zr(w),this.ob===null)throw Error("Unable to allocate memory for the SQL string");this.ub=this.ob,this.gb=this.Fb=null}function f(w){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),w!=null){var S=this.filename,k="/",T=S;if(k&&(k=typeof k=="string"?k:_i(k),T=S?xi(k+"/"+S):k),S=js(!0,!0),T=Qo(T,S),w){if(typeof w=="string"){k=Array(w.length);for(var C=0,$=w.length;C<$;++C)k[C]=w.charCodeAt(C);w=k}Rr(T,S|146),k=Qt(T,577),aa(k,w,0,w.length,0),Ci(k),Rr(T,S)}}this.handleError(D(this.filename,g)),this.db=Be(g,"i32"),xa(this.db),this.pb={},this.Sa={}}var g=pt(4),E=h.cwrap,D=E("sqlite3_open","number",["string","number"]),O=E("sqlite3_close_v2","number",["number"]),P=E("sqlite3_exec","number",["number","string","number","number","number"]),z=E("sqlite3_changes","number",["number"]),J=E("sqlite3_prepare_v2","number",["number","string","number","number","number"]),ga=E("sqlite3_sql","string",["number"]),ec=E("sqlite3_normalized_sql","string",["number"]),ya=E("sqlite3_prepare_v2","number",["number","number","number","number","number"]),tc=E("sqlite3_bind_text","number",["number","number","number","number","number"]),ma=E("sqlite3_bind_blob","number",["number","number","number","number","number"]),nc=E("sqlite3_bind_double","number",["number","number","number"]),rc=E("sqlite3_bind_int","number",["number","number","number"]),ic=E("sqlite3_bind_parameter_index","number",["number","string"]),sc=E("sqlite3_step","number",["number"]),ac=E("sqlite3_errmsg","string",["number"]),oc=E("sqlite3_column_count","number",["number"]),cc=E("sqlite3_data_count","number",["number"]),lc=E("sqlite3_column_double","number",["number","number"]),ba=E("sqlite3_column_text","string",["number","number"]),uc=E("sqlite3_column_blob","number",["number","number"]),hc=E("sqlite3_column_bytes","number",["number","number"]),dc=E("sqlite3_column_type","number",["number","number"]),fc=E("sqlite3_column_name","string",["number","number"]),pc=E("sqlite3_reset","number",["number"]),wc=E("sqlite3_clear_bindings","number",["number"]),gc=E("sqlite3_finalize","number",["number"]),va=E("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),yc=E("sqlite3_value_type","number",["number"]),mc=E("sqlite3_value_bytes","number",["number"]),bc=E("sqlite3_value_text","string",["number"]),vc=E("sqlite3_value_blob","number",["number"]),Ec=E("sqlite3_value_double","number",["number"]),Sc=E("sqlite3_result_double","",["number","number"]),Ea=E("sqlite3_result_null","",["number"]),xc=E("sqlite3_result_text","",["number","string","number","number"]),Lc=E("sqlite3_result_blob","",["number","number","number","number"]),kc=E("sqlite3_result_int","",["number","number"]),jr=E("sqlite3_result_error","",["number","string","number"]),Sa=E("sqlite3_aggregate_context","number",["number","number"]),xa=E("RegisterExtensionFunctions","number",["number"]),La=E("sqlite3_update_hook","number",["number","number","number"]);o.prototype.bind=function(w){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(w)?this.Wb(w):w!=null&&typeof w=="object"?this.Xb(w):!0},o.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var w=sc(this.Qa);switch(w){case 100:return!0;case 101:return!1;default:throw this.db.handleError(w)}},o.prototype.Pb=function(w){return w==null&&(w=this.Oa,this.Oa+=1),lc(this.Qa,w)},o.prototype.hc=function(w){if(w==null&&(w=this.Oa,this.Oa+=1),w=ba(this.Qa,w),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(w)},o.prototype.mc=function(w){return w==null&&(w=this.Oa,this.Oa+=1),ba(this.Qa,w)},o.prototype.getBlob=function(w){w==null&&(w=this.Oa,this.Oa+=1);var S=hc(this.Qa,w);w=uc(this.Qa,w);for(var k=new Uint8Array(S),T=0;T<S;T+=1)k[T]=Q[w+T];return k},o.prototype.get=function(w,S){S=S||{},w!=null&&this.bind(w)&&this.step(),w=[];for(var k=cc(this.Qa),T=0;T<k;T+=1)switch(dc(this.Qa,T)){case 1:var C=S.useBigInt?this.hc(T):this.Pb(T);w.push(C);break;case 2:w.push(this.Pb(T));break;case 3:w.push(this.mc(T));break;case 4:w.push(this.getBlob(T));break;default:w.push(null)}return w},o.prototype.Db=function(){for(var w=[],S=oc(this.Qa),k=0;k<S;k+=1)w.push(fc(this.Qa,k));return w},o.prototype.Ob=function(w,S){w=this.get(w,S),S=this.Db();for(var k={},T=0;T<S.length;T+=1)k[S[T]]=w[T];return k},o.prototype.lc=function(){return ga(this.Qa)},o.prototype.ic=function(){return ec(this.Qa)},o.prototype.Jb=function(w){return w!=null&&this.bind(w),this.step(),this.reset()},o.prototype.Lb=function(w,S){S==null&&(S=this.Oa,this.Oa+=1),w=zr(w),this.yb.push(w),this.db.handleError(tc(this.Qa,S,w,-1,0))},o.prototype.Vb=function(w,S){S==null&&(S=this.Oa,this.Oa+=1);var k=Ur(w.length);Q.set(w,k),this.yb.push(k),this.db.handleError(ma(this.Qa,S,k,w.length,0))},o.prototype.Kb=function(w,S){S==null&&(S=this.Oa,this.Oa+=1),this.db.handleError((w===(w|0)?rc:nc)(this.Qa,S,w))},o.prototype.Yb=function(w){w==null&&(w=this.Oa,this.Oa+=1),ma(this.Qa,w,0,0,0)},o.prototype.Mb=function(w,S){switch(S==null&&(S=this.Oa,this.Oa+=1),typeof w){case"string":this.Lb(w,S);return;case"number":this.Kb(w,S);return;case"bigint":this.Lb(w.toString(),S);return;case"boolean":this.Kb(w+0,S);return;case"object":if(w===null){this.Yb(S);return}if(w.length!=null){this.Vb(w,S);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+w+")."},o.prototype.Xb=function(w){var S=this;return Object.keys(w).forEach(function(k){var T=ic(S.Qa,k);T!==0&&S.Mb(w[k],T)}),!0},o.prototype.Wb=function(w){for(var S=0;S<w.length;S+=1)this.Mb(w[S],S+1);return!0},o.prototype.reset=function(){return this.Cb(),wc(this.Qa)===0&&pc(this.Qa)===0},o.prototype.Cb=function(){for(var w;(w=this.yb.pop())!==void 0;)Tn(w)},o.prototype.cb=function(){this.Cb();var w=gc(this.Qa)===0;return delete this.db.pb[this.Qa],this.Qa=0,w},c.prototype.next=function(){if(this.ob===null)return{done:!0};if(this.gb!==null&&(this.gb.cb(),this.gb=null),!this.db.db)throw this.Ab(),Error("Database closed");var w=Fr(),S=pt(4);xn(g),xn(S);try{this.db.handleError(ya(this.db.db,this.ub,-1,g,S)),this.ub=Be(S,"i32");var k=Be(g,"i32");return k===0?(this.Ab(),{done:!0}):(this.gb=new o(k,this.db),this.db.pb[k]=this.gb,{value:this.gb,done:!1})}catch(T){throw this.Fb=j(this.ub),this.Ab(),T}finally{Wr(w)}},c.prototype.Ab=function(){Tn(this.ob),this.ob=null},c.prototype.jc=function(){return this.Fb!==null?this.Fb:j(this.ub)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(c.prototype[Symbol.iterator]=function(){return this}),f.prototype.Jb=function(w,S){if(!this.db)throw"Database closed";if(S){w=this.Gb(w,S);try{w.step()}finally{w.cb()}}else this.handleError(P(this.db,w,0,0,g));return this},f.prototype.exec=function(w,S,k){if(!this.db)throw"Database closed";var T=null,C=null,$=null;try{$=C=zr(w);var Ee=pt(4);for(w=[];Be($,"i8")!==0;){xn(g),xn(Ee),this.handleError(ya(this.db,$,-1,g,Ee));var fe=Be(g,"i32");if($=Be(Ee,"i32"),fe!==0){var ce=null;for(T=new o(fe,this),S!=null&&T.bind(S);T.step();)ce===null&&(ce={columns:T.Db(),values:[]},w.push(ce)),ce.values.push(T.get(null,k));T.cb()}}return w}catch(Se){throw T&&T.cb(),Se}finally{C&&Tn(C)}},f.prototype.ec=function(w,S,k,T,C){typeof S=="function"&&(T=k,k=S,S=void 0),w=this.Gb(w,S);try{for(;w.step();)k(w.Ob(null,C))}finally{w.cb()}if(typeof T=="function")return T()},f.prototype.Gb=function(w,S){if(xn(g),this.handleError(J(this.db,w,-1,g,0)),w=Be(g,"i32"),w===0)throw"Nothing to prepare";var k=new o(w,this);return S!=null&&k.bind(S),this.pb[w]=k},f.prototype.pc=function(w){return new c(w,this)},f.prototype.fc=function(){Object.values(this.pb).forEach(function(S){S.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.handleError(O(this.db));var w=Ho(this.filename);return this.handleError(D(this.filename,g)),this.db=Be(g,"i32"),xa(this.db),w},f.prototype.close=function(){this.db!==null&&(Object.values(this.pb).forEach(function(w){w.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.fb&&(Qe(this.fb),this.fb=void 0),this.handleError(O(this.db)),ta("/"+this.filename),this.db=null)},f.prototype.handleError=function(w){if(w===0)return null;throw w=ac(this.db),Error(w)},f.prototype.kc=function(){return z(this.db)},f.prototype.bc=function(w,S){Object.prototype.hasOwnProperty.call(this.Sa,w)&&(Qe(this.Sa[w]),delete this.Sa[w]);var k=_n(function(T,C,$){C=s(C,$);try{var Ee=S.apply(null,C)}catch(fe){jr(T,fe,-1);return}r(T,Ee)},"viii");return this.Sa[w]=k,this.handleError(va(this.db,w,S.length,1,0,k,0,0,0)),this},f.prototype.ac=function(w,S){var k=S.init||function(){return null},T=S.finalize||function(ce){return ce},C=S.step;if(!C)throw"An aggregate function must have a step function in "+w;var $={};Object.hasOwnProperty.call(this.Sa,w)&&(Qe(this.Sa[w]),delete this.Sa[w]),S=w+"__finalize",Object.hasOwnProperty.call(this.Sa,S)&&(Qe(this.Sa[S]),delete this.Sa[S]);var Ee=_n(function(ce,Se,Mi){var wt=Sa(ce,1);Object.hasOwnProperty.call($,wt)||($[wt]=k()),Se=s(Se,Mi),Se=[$[wt]].concat(Se);try{$[wt]=C.apply(null,Se)}catch(_c){delete $[wt],jr(ce,_c,-1)}},"viii"),fe=_n(function(ce){var Se=Sa(ce,1);try{var Mi=T($[Se])}catch(wt){delete $[Se],jr(ce,wt,-1);return}r(ce,Mi),delete $[Se]},"vi");return this.Sa[w]=Ee,this.Sa[S]=fe,this.handleError(va(this.db,w,C.length-1,1,0,0,Ee,fe,0)),this},f.prototype.vc=function(w){return this.fb&&(La(this.db,0,0),Qe(this.fb),this.fb=void 0),w?(this.fb=_n(function(S,k,T,C,$){switch(k){case 18:S="insert";break;case 23:S="update";break;case 9:S="delete";break;default:throw"unknown operationCode in updateHook callback: "+k}if(T=j(T),C=j(C),$>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";w(S,T,C,Number($))},"viiiij"),La(this.db,this.fb,0),this):this},o.prototype.bind=o.prototype.bind,o.prototype.step=o.prototype.step,o.prototype.get=o.prototype.get,o.prototype.getColumnNames=o.prototype.Db,o.prototype.getAsObject=o.prototype.Ob,o.prototype.getSQL=o.prototype.lc,o.prototype.getNormalizedSQL=o.prototype.ic,o.prototype.run=o.prototype.Jb,o.prototype.reset=o.prototype.reset,o.prototype.freemem=o.prototype.Cb,o.prototype.free=o.prototype.cb,c.prototype.next=c.prototype.next,c.prototype.getRemainingSQL=c.prototype.jc,f.prototype.run=f.prototype.Jb,f.prototype.exec=f.prototype.exec,f.prototype.each=f.prototype.ec,f.prototype.prepare=f.prototype.Gb,f.prototype.iterateStatements=f.prototype.pc,f.prototype.export=f.prototype.fc,f.prototype.close=f.prototype.close,f.prototype.handleError=f.prototype.handleError,f.prototype.getRowsModified=f.prototype.kc,f.prototype.create_function=f.prototype.bc,f.prototype.create_aggregate=f.prototype.ac,f.prototype.updateHook=f.prototype.vc,h.Database=f};var W="./this.program",oe=(wa=(pa=globalThis.document)==null?void 0:pa.currentScript)==null?void 0:wa.src;B&&(oe=self.location.href);var Fe="",bn,ct;if(_||B){try{Fe=new URL(".",oe).href}catch{}B&&(ct=r=>{var s=new XMLHttpRequest;return s.open("GET",r,!1),s.responseType="arraybuffer",s.send(null),new Uint8Array(s.response)}),bn=async r=>{if(r=await fetch(r,{credentials:"same-origin"}),r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)}}var Wt=console.log.bind(console),U=console.error.bind(console),lt,Dr=!1,bi,Q,ee,vn,F,A,vi,Ei,ve;function qs(){var r=Vr.buffer;Q=new Int8Array(r),vn=new Int16Array(r),ee=new Uint8Array(r),F=new Int32Array(r),A=new Uint32Array(r),vi=new Float32Array(r),Ei=new Float64Array(r),ve=new BigInt64Array(r),new BigUint64Array(r)}function En(r){var s;throw(s=h.onAbort)==null||s.call(h,r),r="Aborted("+r+")",U(r),Dr=!0,new WebAssembly.RuntimeError(r+". Build with -sASSERTIONS for more info.")}var Si;async function Co(r){if(!lt)try{var s=await bn(r);return new Uint8Array(s)}catch{}if(r==Si&<)r=new Uint8Array(lt);else if(ct)r=ct(r);else throw"both async and sync fetching of the wasm failed";return r}async function qo(r,s){try{var o=await Co(r);return await WebAssembly.instantiate(o,s)}catch(c){U(`failed to asynchronously prepare wasm: ${c}`),En(c)}}async function Bo(r){var s=Si;if(!lt)try{var o=fetch(s,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(o,r)}catch(c){U(`wasm streaming compile failed: ${c}`),U("falling back to ArrayBuffer instantiation")}return qo(s,r)}class Bs{constructor(s){L(this,"name","ExitStatus");this.message=`Program terminated with exit(${s})`,this.status=s}}var $s=r=>{for(;0<r.length;)r.shift()(h)},Rs=[],Os=[],$o=()=>{var r=h.preRun.shift();Os.push(r)},ut=0,Sn=null;function Be(r,s="i8"){switch(s.endsWith("*")&&(s="*"),s){case"i1":return Q[r];case"i8":return Q[r];case"i16":return vn[r>>1];case"i32":return F[r>>2];case"i64":return ve[r>>3];case"float":return vi[r>>2];case"double":return Ei[r>>3];case"*":return A[r>>2];default:En(`invalid type for getValue: ${s}`)}}var Nr=!0;function xn(r){var s="i32";switch(s.endsWith("*")&&(s="*"),s){case"i1":Q[r]=0;break;case"i8":Q[r]=0;break;case"i16":vn[r>>1]=0;break;case"i32":F[r>>2]=0;break;case"i64":ve[r>>3]=BigInt(0);break;case"float":vi[r>>2]=0;break;case"double":Ei[r>>3]=0;break;case"*":A[r>>2]=0;break;default:En(`invalid type for setValue: ${s}`)}}var As=new TextDecoder,Ms=(r,s,o,c)=>{if(o=s+o,c)return o;for(;r[s]&&!(s>=o);)++s;return s},j=(r,s,o)=>r?As.decode(ee.subarray(r,Ms(ee,r,s,o))):"",zs=(r,s)=>{for(var o=0,c=r.length-1;0<=c;c--){var f=r[c];f==="."?r.splice(c,1):f===".."?(r.splice(c,1),o++):o&&(r.splice(c,1),o--)}if(s)for(;o;o--)r.unshift("..");return r},xi=r=>{var s=r.charAt(0)==="/",o=r.slice(-1)==="/";return(r=zs(r.split("/").filter(c=>!!c),!s).join("/"))||s||(r="."),r&&o&&(r+="/"),(s?"/":"")+r},Us=r=>{var s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1);return r=s[0],s=s[1],!r&&!s?".":(s&&(s=s.slice(0,-1)),r+s)},Pr=r=>r&&r.match(/([^\/]+|\/)\/*$/)[1],Ro=()=>r=>crypto.getRandomValues(r),Ws=r=>{(Ws=Ro())(r)},Oo=(...r)=>{for(var s="",o=!1,c=r.length-1;-1<=c&&!o;c--){if(o=0<=c?r[c]:"/",typeof o!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";s=o+"/"+s,o=o.charAt(0)==="/"}return s=zs(s.split("/").filter(f=>!!f),!o).join("/"),(o?"/":"")+s||"."},Cr=r=>{var s=Ms(r,0);return As.decode(r.buffer?r.subarray(0,s):new Uint8Array(r.slice(0,s)))},Li=[],Ft=r=>{for(var s=0,o=0;o<r.length;++o){var c=r.charCodeAt(o);127>=c?s++:2047>=c?s+=2:55296<=c&&57343>=c?(s+=4,++o):s+=3}return s},Ie=(r,s,o,c)=>{if(!(0<c))return 0;var f=o;c=o+c-1;for(var g=0;g<r.length;++g){var E=r.codePointAt(g);if(127>=E){if(o>=c)break;s[o++]=E}else if(2047>=E){if(o+1>=c)break;s[o++]=192|E>>6,s[o++]=128|E&63}else if(65535>=E){if(o+2>=c)break;s[o++]=224|E>>12,s[o++]=128|E>>6&63,s[o++]=128|E&63}else{if(o+3>=c)break;s[o++]=240|E>>18,s[o++]=128|E>>12&63,s[o++]=128|E>>6&63,s[o++]=128|E&63,g++}}return s[o]=0,o-f},Fs=[];function Vs(r,s){Fs[r]={input:[],output:[],kb:s},Ni(r,Ao)}var Ao={open(r){var s=Fs[r.node.nb];if(!s)throw new x(43);r.Va=s,r.seekable=!1},close(r){r.Va.kb.lb(r.Va)},lb(r){r.Va.kb.lb(r.Va)},read(r,s,o,c){if(!r.Va||!r.Va.kb.Qb)throw new x(60);for(var f=0,g=0;g<c;g++){try{var E=r.Va.kb.Qb(r.Va)}catch{throw new x(29)}if(E===void 0&&f===0)throw new x(6);if(E==null)break;f++,s[o+g]=E}return f&&(r.node.$a=Date.now()),f},write(r,s,o,c){if(!r.Va||!r.Va.kb.Hb)throw new x(60);try{for(var f=0;f<c;f++)r.Va.kb.Hb(r.Va,s[o+f])}catch{throw new x(29)}return c&&(r.node.Ua=r.node.Ta=Date.now()),f}},Mo={Qb(){var o;e:{if(!Li.length){var r=null;if((o=globalThis.window)!=null&&o.prompt&&(r=window.prompt("Input: "),r!==null&&(r+=`
|
|
16
|
+
`)),!r){var s=null;break e}s=Array(Ft(r)+1),r=Ie(r,s,0,s.length),s.length=r,Li=s}s=Li.shift()}return s},Hb(r,s){s===null||s===10?(Wt(Cr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(Wt(Cr(r.output)),r.output=[])},Dc(){return{yc:25856,Ac:5,xc:191,zc:35387,wc:[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]}},Ec(){return 0},Fc(){return[24,80]}},zo={Hb(r,s){s===null||s===10?(U(Cr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(U(Cr(r.output)),r.output=[])}},N={Za:null,ab(){return N.createNode(null,"/",16895,0)},createNode(r,s,o,c){if((o&61440)===24576||(o&61440)===4096)throw new x(63);return N.Za||(N.Za={dir:{node:{Wa:N.La.Wa,Xa:N.La.Xa,mb:N.La.mb,rb:N.La.rb,Tb:N.La.Tb,xb:N.La.xb,vb:N.La.vb,Ib:N.La.Ib,wb:N.La.wb},stream:{Ya:N.Ma.Ya}},file:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:{Ya:N.Ma.Ya,read:N.Ma.read,write:N.Ma.write,sb:N.Ma.sb,tb:N.Ma.tb}},link:{node:{Wa:N.La.Wa,Xa:N.La.Xa,eb:N.La.eb},stream:{}},Nb:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:jo}}),o=Ys(r,s,o,c),ie(o.mode)?(o.La=N.Za.dir.node,o.Ma=N.Za.dir.stream,o.Na={}):(o.mode&61440)===32768?(o.La=N.Za.file.node,o.Ma=N.Za.file.stream,o.Ra=0,o.Na=null):(o.mode&61440)===40960?(o.La=N.Za.link.node,o.Ma=N.Za.link.stream):(o.mode&61440)===8192&&(o.La=N.Za.Nb.node,o.Ma=N.Za.Nb.stream),o.$a=o.Ua=o.Ta=Date.now(),r&&(r.Na[s]=o,r.$a=r.Ua=r.Ta=o.$a),o},Cc(r){return r.Na?r.Na.subarray?r.Na.subarray(0,r.Ra):new Uint8Array(r.Na):new Uint8Array(0)},La:{Wa(r){var s={};return s.cc=(r.mode&61440)===8192?r.id:1,s.oc=r.id,s.mode=r.mode,s.rc=1,s.uid=0,s.nc=0,s.nb=r.nb,ie(r.mode)?s.size=4096:(r.mode&61440)===32768?s.size=r.Ra:(r.mode&61440)===40960?s.size=r.link.length:s.size=0,s.$a=new Date(r.$a),s.Ua=new Date(r.Ua),s.Ta=new Date(r.Ta),s.Zb=4096,s.$b=Math.ceil(s.size/s.Zb),s},Xa(r,s){for(var o of["mode","atime","mtime","ctime"])s[o]!=null&&(r[o]=s[o]);s.size!==void 0&&(s=s.size,r.Ra!=s&&(s==0?(r.Na=null,r.Ra=0):(o=r.Na,r.Na=new Uint8Array(s),o&&r.Na.set(o.subarray(0,Math.min(s,r.Ra))),r.Ra=s)))},mb(){throw N.zb||(N.zb=new x(44),N.zb.stack="<generic error, no stack>"),N.zb},rb(r,s,o,c){return N.createNode(r,s,o,c)},Tb(r,s,o){try{var c=ht(s,o)}catch{}if(c){if(ie(r.mode))for(var f in c.Na)throw new x(55);Ii(c)}delete r.parent.Na[r.name],s.Na[o]=r,r.name=o,s.Ta=s.Ua=r.parent.Ta=r.parent.Ua=Date.now()},xb(r,s){delete r.Na[s],r.Ta=r.Ua=Date.now()},vb(r,s){var o=ht(r,s),c;for(c in o.Na)throw new x(55);delete r.Na[s],r.Ta=r.Ua=Date.now()},Ib(r){return[".","..",...Object.keys(r.Na)]},wb(r,s,o){return r=N.createNode(r,s,41471,0),r.link=o,r},eb(r){if((r.mode&61440)!==40960)throw new x(28);return r.link}},Ma:{read(r,s,o,c,f){var g=r.node.Na;if(f>=r.node.Ra)return 0;if(r=Math.min(r.node.Ra-f,c),8<r&&g.subarray)s.set(g.subarray(f,f+r),o);else for(c=0;c<r;c++)s[o+c]=g[f+c];return r},write(r,s,o,c,f,g){if(s.buffer===Q.buffer&&(g=!1),!c)return 0;if(r=r.node,r.Ua=r.Ta=Date.now(),s.subarray&&(!r.Na||r.Na.subarray)){if(g)return r.Na=s.subarray(o,o+c),r.Ra=c;if(r.Ra===0&&f===0)return r.Na=s.slice(o,o+c),r.Ra=c;if(f+c<=r.Ra)return r.Na.set(s.subarray(o,o+c),f),c}g=f+c;var E=r.Na?r.Na.length:0;if(E>=g||(g=Math.max(g,E*(1048576>E?2:1.125)>>>0),E!=0&&(g=Math.max(g,256)),E=r.Na,r.Na=new Uint8Array(g),0<r.Ra&&r.Na.set(E.subarray(0,r.Ra),0)),r.Na.subarray&&s.subarray)r.Na.set(s.subarray(o,o+c),f);else for(g=0;g<c;g++)r.Na[f+g]=s[o+g];return r.Ra=Math.max(r.Ra,f+c),c},Ya(r,s,o){if(o===1?s+=r.position:o===2&&(r.node.mode&61440)===32768&&(s+=r.node.Ra),0>s)throw new x(28);return s},sb(r,s,o,c,f){if((r.node.mode&61440)!==32768)throw new x(43);if(r=r.node.Na,f&2||!r||r.buffer!==Q.buffer){f=!0,c=65536*Math.ceil(s/65536);var g=da(65536,c);if(g&&ee.fill(0,g,g+c),c=g,!c)throw new x(48);r&&((0<o||o+s<r.length)&&(r.subarray?r=r.subarray(o,o+s):r=Array.prototype.slice.call(r,o,o+s)),Q.set(r,c))}else f=!1,c=r.byteOffset;return{tc:c,Ub:f}},tb(r,s,o,c){return N.Ma.write(r,s,0,c,o,!1),0}}},js=(r,s)=>{var o=0;return r&&(o|=365),s&&(o|=146),o},ki=null,Qs={},Vt=[],Uo=1,Ve=null,Hs=!1,Ks=!0,x=class{constructor(r){L(this,"name","ErrnoError");this.Pa=r}},Wo=class{constructor(){L(this,"qb",{});L(this,"node",null)}get flags(){return this.qb.flags}set flags(r){this.qb.flags=r}get position(){return this.qb.position}set position(r){this.qb.position=r}},Fo=class{constructor(r,s,o,c){L(this,"La",{});L(this,"Ma",{});L(this,"ib",null);r||(r=this),this.parent=r,this.ab=r.ab,this.id=Uo++,this.name=s,this.mode=o,this.nb=c,this.$a=this.Ua=this.Ta=Date.now()}get read(){return(this.mode&365)===365}set read(r){r?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(r){r?this.mode|=146:this.mode&=-147}};function de(r,s={}){if(!r)throw new x(44);s.Bb??(s.Bb=!0),r.charAt(0)==="/"||(r="//"+r);var o=0;e:for(;40>o;o++){r=r.split("/").filter(D=>!!D);for(var c=ki,f="/",g=0;g<r.length;g++){var E=g===r.length-1;if(E&&s.parent)break;if(r[g]!==".")if(r[g]==="..")if(f=Us(f),c===c.parent){r=f+"/"+r.slice(g+1).join("/"),o--;continue e}else c=c.parent;else{f=xi(f+"/"+r[g]);try{c=ht(c,r[g])}catch(D){if((D==null?void 0:D.Pa)===44&&E&&s.sc)return{path:f};throw D}if(!c.ib||E&&!s.Bb||(c=c.ib.root),(c.mode&61440)===40960&&(!E||s.hb)){if(!c.La.eb)throw new x(52);c=c.La.eb(c),c.charAt(0)==="/"||(c=Us(f)+"/"+c),r=c+"/"+r.slice(g+1).join("/");continue e}}}return{path:f,node:c}}throw new x(32)}function _i(r){for(var s;;){if(r===r.parent)return r=r.ab.Sb,s?r[r.length-1]!=="/"?`${r}/${s}`:r+s:r;s=s?`${r.name}/${s}`:r.name,r=r.parent}}function Ti(r,s){for(var o=0,c=0;c<s.length;c++)o=(o<<5)-o+s.charCodeAt(c)|0;return(r+o>>>0)%Ve.length}function Ii(r){var s=Ti(r.parent.id,r.name);if(Ve[s]===r)Ve[s]=r.jb;else for(s=Ve[s];s;){if(s.jb===r){s.jb=r.jb;break}s=s.jb}}function ht(r,s){var o=ie(r.mode)?(o=jt(r,"x"))?o:r.La.mb?0:2:54;if(o)throw new x(o);for(o=Ve[Ti(r.id,s)];o;o=o.jb){var c=o.name;if(o.parent.id===r.id&&c===s)return o}return r.La.mb(r,s)}function Ys(r,s,o,c){return r=new Fo(r,s,o,c),s=Ti(r.parent.id,r.name),r.jb=Ve[s],Ve[s]=r}function ie(r){return(r&61440)===16384}function jt(r,s){return Ks?0:s.includes("r")&&!(r.mode&292)||s.includes("w")&&!(r.mode&146)||s.includes("x")&&!(r.mode&73)?2:0}function Gs(r,s){if(!ie(r.mode))return 54;try{return ht(r,s),20}catch{}return jt(r,"wx")}function Js(r,s,o){try{var c=ht(r,s)}catch(f){return f.Pa}if(r=jt(r,"wx"))return r;if(o){if(!ie(c.mode))return 54;if(c===c.parent||_i(c)==="/")return 10}else if(ie(c.mode))return 31;return 0}function qr(r){if(!r)throw new x(63);return r}function te(r){if(r=Vt[r],!r)throw new x(8);return r}function Xs(r,s=-1){if(r=Object.assign(new Wo,r),s==-1)e:{for(s=0;4096>=s;s++)if(!Vt[s])break e;throw new x(33)}return r.bb=s,Vt[s]=r}function Vo(r,s=-1){var o,c;return r=Xs(r,s),(c=(o=r.Ma)==null?void 0:o.Bc)==null||c.call(o,r),r}function Di(r,s,o){var c=r==null?void 0:r.Ma.Xa;r=c?r:s,c??(c=s.La.Xa),qr(c),c(r,o)}var jo={open(r){var s,o;r.Ma=Qs[r.node.nb].Ma,(o=(s=r.Ma).open)==null||o.call(s,r)},Ya(){throw new x(70)}};function Ni(r,s){Qs[r]={Ma:s}}function Zs(r,s){var o=s==="/";if(o&&ki)throw new x(10);if(!o&&s){var c=de(s,{Bb:!1});if(s=c.path,c=c.node,c.ib)throw new x(10);if(!ie(c.mode))throw new x(54)}s={type:r,Gc:{},Sb:s,qc:[]},r=r.ab(s),r.ab=s,s.root=r,o?ki=r:c&&(c.ib=s,c.ab&&c.ab.qc.push(s))}function Br(r,s,o){var c=de(r,{parent:!0}).node;if(r=Pr(r),!r)throw new x(28);if(r==="."||r==="..")throw new x(20);var f=Gs(c,r);if(f)throw new x(f);if(!c.La.rb)throw new x(63);return c.La.rb(c,r,s,o)}function Qo(r,s=438){return Br(r,s&4095|32768,0)}function De(r,s=511){return Br(r,s&1023|16384,0)}function $r(r,s,o){typeof o>"u"&&(o=s,s=438),Br(r,s|8192,o)}function Pi(r,s){if(!Oo(r))throw new x(44);var o=de(s,{parent:!0}).node;if(!o)throw new x(44);s=Pr(s);var c=Gs(o,s);if(c)throw new x(c);if(!o.La.wb)throw new x(63);o.La.wb(o,s,r)}function ea(r){var s=de(r,{parent:!0}).node;r=Pr(r);var o=ht(s,r),c=Js(s,r,!0);if(c)throw new x(c);if(!s.La.vb)throw new x(63);if(o.ib)throw new x(10);s.La.vb(s,r),Ii(o)}function ta(r){var s=de(r,{parent:!0}).node;if(!s)throw new x(44);r=Pr(r);var o=ht(s,r),c=Js(s,r,!1);if(c)throw new x(c);if(!s.La.xb)throw new x(63);if(o.ib)throw new x(10);s.La.xb(s,r),Ii(o)}function Ln(r,s){return r=de(r,{hb:!s}).node,qr(r.La.Wa)(r)}function na(r,s,o,c){Di(r,s,{mode:o&4095|s.mode&-4096,Ta:Date.now(),dc:c})}function Rr(r,s){r=typeof r=="string"?de(r,{hb:!0}).node:r,na(null,r,s)}function ra(r,s,o){if(ie(s.mode))throw new x(31);if((s.mode&61440)!==32768)throw new x(28);var c=jt(s,"w");if(c)throw new x(c);Di(r,s,{size:o,timestamp:Date.now()})}function Qt(r,s,o=438){if(r==="")throw new x(44);if(typeof s=="string"){var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[s];if(typeof c>"u")throw Error(`Unknown file open mode: ${s}`);s=c}if(o=s&64?o&4095|32768:0,typeof r=="object")c=r;else{var f=r.endsWith("/"),g=de(r,{hb:!(s&131072),sc:!0});c=g.node,r=g.path}if(g=!1,s&64)if(c){if(s&128)throw new x(20)}else{if(f)throw new x(31);c=Br(r,o|511,0),g=!0}if(!c)throw new x(44);if((c.mode&61440)===8192&&(s&=-513),s&65536&&!ie(c.mode))throw new x(54);if(!g&&(c?(c.mode&61440)===40960?f=32:(f=["r","w","rw"][s&3],s&512&&(f+="w"),f=ie(c.mode)&&(f!=="r"||s&576)?31:jt(c,f)):f=44,f))throw new x(f);return s&512&&!g&&(f=c,f=typeof f=="string"?de(f,{hb:!0}).node:f,ra(null,f,0)),s=Xs({node:c,path:_i(c),flags:s&-131713,seekable:!0,position:0,Ma:c.Ma,uc:[],error:!1}),s.Ma.open&&s.Ma.open(s),g&&Rr(c,o&511),s}function Ci(r){if(r.bb===null)throw new x(8);r.Eb&&(r.Eb=null);try{r.Ma.close&&r.Ma.close(r)}catch(s){throw s}finally{Vt[r.bb]=null}r.bb=null}function ia(r,s,o){if(r.bb===null)throw new x(8);if(!r.seekable||!r.Ma.Ya)throw new x(70);if(o!=0&&o!=1&&o!=2)throw new x(28);r.position=r.Ma.Ya(r,s,o),r.uc=[]}function sa(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===1)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.read)throw new x(28);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.read(r,s,o,c,f),g||(r.position+=s),s}function aa(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===0)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.write)throw new x(28);r.seekable&&r.flags&1024&&ia(r,0,2);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.write(r,s,o,c,f,void 0),g||(r.position+=s),s}function Ho(r){var s=s||0;s=Qt(r,s),r=Ln(r).size;var o=new Uint8Array(r);return sa(s,o,0,r,0),Ci(s),o}function je(r,s,o){r=xi("/dev/"+r);var c=js(!!s,!!o);je.Rb??(je.Rb=64);var f=je.Rb++<<8|0;Ni(f,{open(g){g.seekable=!1},close(){var g;(g=o==null?void 0:o.buffer)!=null&&g.length&&o(10)},read(g,E,D,O){for(var P=0,z=0;z<O;z++){try{var J=s()}catch{throw new x(29)}if(J===void 0&&P===0)throw new x(6);if(J==null)break;P++,E[D+z]=J}return P&&(g.node.$a=Date.now()),P},write(g,E,D,O){for(var P=0;P<O;P++)try{o(E[D+P])}catch{throw new x(29)}return O&&(g.node.Ua=g.node.Ta=Date.now()),P}}),$r(r,c,f)}var M={};function dt(r,s,o){if(s.charAt(0)==="/")return s;if(r=r===-100?"/":te(r).path,s.length==0){if(!o)throw new x(44);return r}return r+"/"+s}function Or(r,s){A[r>>2]=s.cc,A[r+4>>2]=s.mode,A[r+8>>2]=s.rc,A[r+12>>2]=s.uid,A[r+16>>2]=s.nc,A[r+20>>2]=s.nb,ve[r+24>>3]=BigInt(s.size),F[r+32>>2]=4096,F[r+36>>2]=s.$b;var o=s.$a.getTime(),c=s.Ua.getTime(),f=s.Ta.getTime();return ve[r+40>>3]=BigInt(Math.floor(o/1e3)),A[r+48>>2]=o%1e3*1e6,ve[r+56>>3]=BigInt(Math.floor(c/1e3)),A[r+64>>2]=c%1e3*1e6,ve[r+72>>3]=BigInt(Math.floor(f/1e3)),A[r+80>>2]=f%1e3*1e6,ve[r+88>>3]=BigInt(s.oc),0}var Ar=void 0,Mr=()=>{var r=F[+Ar>>2];return Ar+=4,r},qi=0,Ko=[0,31,60,91,121,152,182,213,244,274,305,335],Yo=[0,31,59,90,120,151,181,212,243,273,304,334],kn={},oa=r=>{if(!(r instanceof Bs||r=="unwind"))throw r},ca=r=>{var s;throw bi=r,Nr||0<qi||((s=h.onExit)==null||s.call(h,r),Dr=!0),new Bs(r)},Go=r=>{if(!Dr)try{r()}catch(s){oa(s)}finally{if(!(Nr||0<qi))try{bi=r=bi,ca(r)}catch(s){oa(s)}}},Bi={},la=()=>{var c;if(!$i){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((c=globalThis.navigator)==null?void 0:c.language)??"C").replace("-","_")+".UTF-8",_:W||"./this.program"},s;for(s in Bi)Bi[s]===void 0?delete r[s]:r[s]=Bi[s];var o=[];for(s in r)o.push(`${s}=${r[s]}`);$i=o}return $i},$i,Jo=(r,s,o,c)=>{var f={string:P=>{var z=0;if(P!=null&&P!==0){z=Ft(P)+1;var J=pt(z);Ie(P,ee,J,z),z=J}return z},array:P=>{var z=pt(P.length);return Q.set(P,z),z}};r=h["_"+r];var g=[],E=0;if(c)for(var D=0;D<c.length;D++){var O=f[o[D]];O?(E===0&&(E=Fr()),g[D]=O(c[D])):g[D]=c[D]}return o=r(...g),o=(function(P){return E!==0&&Wr(E),s==="string"?j(P):s==="boolean"?!!P:P})(o)},zr=r=>{var s=Ft(r)+1,o=Ur(s);return o&&Ie(r,ee,o,s),o},ft,Ri=[],Qe=r=>{ft.delete(He.get(r)),He.set(r,null),Ri.push(r)},ua=r=>{const s=r.length;return[s%128|128,s>>7,...r]},Xo={i:127,p:127,j:126,f:125,d:124,e:111},ha=r=>ua(Array.from(r,s=>Xo[s])),_n=(r,s)=>{if(!ft){ft=new WeakMap;var o=He.length;if(ft)for(var c=0;c<0+o;c++){var f=He.get(c);f&&ft.set(f,c)}}if(o=ft.get(r)||0)return o;o=Ri.length?Ri.pop():He.grow(1);try{He.set(o,r)}catch(g){if(!(g instanceof TypeError))throw g;s=Uint8Array.of(0,97,115,109,1,0,0,0,1,...ua([1,96,...ha(s.slice(1)),...ha(s[0]==="v"?"":s[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),s=new WebAssembly.Module(s),s=new WebAssembly.Instance(s,{e:{f:r}}).exports.f,He.set(o,s)}return ft.set(r,o),o};if(Ve=Array(4096),Zs(N,"/"),De("/tmp"),De("/home"),De("/home/web_user"),(function(){De("/dev"),Ni(259,{read:()=>0,write:(c,f,g,E)=>E,Ya:()=>0}),$r("/dev/null",259),Vs(1280,Mo),Vs(1536,zo),$r("/dev/tty",1280),$r("/dev/tty1",1536);var r=new Uint8Array(1024),s=0,o=()=>(s===0&&(Ws(r),s=r.byteLength),r[--s]);je("random",o),je("urandom",o),De("/dev/shm"),De("/dev/shm/tmp")})(),(function(){De("/proc");var r=De("/proc/self");De("/proc/self/fd"),Zs({ab(){var s=Ys(r,"fd",16895,73);return s.Ma={Ya:N.Ma.Ya},s.La={mb(o,c){o=+c;var f=te(o);return o={parent:null,ab:{Sb:"fake"},La:{eb:()=>f.path},id:o+1},o.parent=o},Ib(){return Array.from(Vt.entries()).filter(([,o])=>o).map(([o])=>o.toString())}},s}},"/proc/self/fd")})(),h.noExitRuntime&&(Nr=h.noExitRuntime),h.print&&(Wt=h.print),h.printErr&&(U=h.printErr),h.wasmBinary&&(lt=h.wasmBinary),h.thisProgram&&(W=h.thisProgram),h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.shift()();h.stackSave=()=>Fr(),h.stackRestore=r=>Wr(r),h.stackAlloc=r=>pt(r),h.cwrap=(r,s,o,c)=>{var f=!o||o.every(g=>g==="number"||g==="boolean");return s!=="string"&&f&&!c?h["_"+r]:(...g)=>Jo(r,s,o,g)},h.addFunction=_n,h.removeFunction=Qe,h.UTF8ToString=j,h.stringToNewUTF8=zr,h.writeArrayToMemory=(r,s)=>{Q.set(r,s)};var Ur,Tn,da,fa,Wr,pt,Fr,Vr,He,Zo={a:(r,s,o,c)=>En(`Assertion failed: ${j(r)}, at: `+[s?j(s):"unknown filename",o,c?j(c):"unknown function"]),i:function(r,s){try{return r=j(r),Rr(r,s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},L:function(r,s,o){try{if(s=j(s),s=dt(r,s),o&-8)return-28;var c=de(s,{hb:!0}).node;return c?(r="",o&4&&(r+="r"),o&2&&(r+="w"),o&1&&(r+="x"),r&&jt(c,r)?-2:0):-44}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},j:function(r,s){try{var o=te(r);return na(o,o.node,s,!1),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},h:function(r){try{var s=te(r);return Di(s,s.node,{timestamp:Date.now(),dc:!1}),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},b:function(r,s,o){Ar=o;try{var c=te(r);switch(s){case 0:var f=Mr();if(0>f)break;for(;Vt[f];)f++;return Vo(c,f).bb;case 1:case 2:return 0;case 3:return c.flags;case 4:return f=Mr(),c.flags|=f,0;case 12:return f=Mr(),vn[f+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},g:function(r,s){try{var o=te(r),c=o.node,f=o.Ma.Wa;r=f?o:c,f??(f=c.La.Wa),qr(f);var g=f(r);return Or(s,g)}catch(E){if(typeof M>"u"||E.name!=="ErrnoError")throw E;return-E.Pa}},H:function(r,s){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return-61;var o=te(r);if(0>s||(o.flags&2097155)===0)throw new x(28);return ra(o,o.node,s),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},G:function(r,s){try{if(s===0)return-28;var o=Ft("/")+1;return s<o?-68:(Ie("/",ee,r,s),o)}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},K:function(r,s){try{return r=j(r),Or(s,Ln(r,!0))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},C:function(r,s,o){try{return s=j(s),s=dt(r,s),De(s,o),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},J:function(r,s,o,c){try{s=j(s);var f=c&256;return s=dt(r,s,c&4096),Or(o,f?Ln(s,!0):Ln(s))}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},x:function(r,s,o,c){Ar=c;try{s=j(s),s=dt(r,s);var f=c?Mr():0;return Qt(s,o,f).bb}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},v:function(r,s,o,c){try{if(s=j(s),s=dt(r,s),0>=c)return-28;var f=de(s).node;if(!f)throw new x(44);if(!f.La.eb)throw new x(28);var g=f.La.eb(f),E=Math.min(c,Ft(g)),D=Q[o+E];return Ie(g,ee,o,c+1),Q[o+E]=D,E}catch(O){if(typeof M>"u"||O.name!=="ErrnoError")throw O;return-O.Pa}},u:function(r){try{return r=j(r),ea(r),0}catch(s){if(typeof M>"u"||s.name!=="ErrnoError")throw s;return-s.Pa}},f:function(r,s){try{return r=j(r),Or(s,Ln(r))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},r:function(r,s,o){try{if(s=j(s),s=dt(r,s),o)if(o===512)ea(s);else return-28;else ta(s);return 0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},q:function(r,s,o){try{s=j(s),s=dt(r,s,!0);var c=Date.now(),f,g;if(o){var E=A[o>>2]+4294967296*F[o+4>>2],D=F[o+8>>2];D==1073741823?f=c:D==1073741822?f=null:f=1e3*E+D/1e6,o+=16,E=A[o>>2]+4294967296*F[o+4>>2],D=F[o+8>>2],D==1073741823?g=c:D==1073741822?g=null:g=1e3*E+D/1e6}else g=f=c;if((g??f)!==null){r=f;var O=de(s,{hb:!0}).node;qr(O.La.Xa)(O,{$a:r,Ua:g})}return 0}catch(P){if(typeof M>"u"||P.name!=="ErrnoError")throw P;return-P.Pa}},m:()=>En(""),l:()=>{Nr=!1,qi=0},A:function(r,s){r=-9007199254740992>r||9007199254740992<r?NaN:Number(r),r=new Date(1e3*r),F[s>>2]=r.getSeconds(),F[s+4>>2]=r.getMinutes(),F[s+8>>2]=r.getHours(),F[s+12>>2]=r.getDate(),F[s+16>>2]=r.getMonth(),F[s+20>>2]=r.getFullYear()-1900,F[s+24>>2]=r.getDay();var o=r.getFullYear();F[s+28>>2]=(o%4!==0||o%100===0&&o%400!==0?Yo:Ko)[r.getMonth()]+r.getDate()-1|0,F[s+36>>2]=-(60*r.getTimezoneOffset()),o=new Date(r.getFullYear(),6,1).getTimezoneOffset();var c=new Date(r.getFullYear(),0,1).getTimezoneOffset();F[s+32>>2]=(o!=c&&r.getTimezoneOffset()==Math.min(c,o))|0},y:function(r,s,o,c,f,g,E){f=-9007199254740992>f||9007199254740992<f?NaN:Number(f);try{var D=te(c);if((s&2)!==0&&(o&2)===0&&(D.flags&2097155)!==2)throw new x(2);if((D.flags&2097155)===1)throw new x(2);if(!D.Ma.sb)throw new x(43);if(!r)throw new x(28);var O=D.Ma.sb(D,r,f,s,o),P=O.tc;return F[g>>2]=O.Ub,A[E>>2]=P,0}catch(z){if(typeof M>"u"||z.name!=="ErrnoError")throw z;return-z.Pa}},z:function(r,s,o,c,f,g){g=-9007199254740992>g||9007199254740992<g?NaN:Number(g);try{var E=te(f);if(o&2){if((E.node.mode&61440)!==32768)throw new x(43);c&2||E.Ma.tb&&E.Ma.tb(E,ee.slice(r,r+s),g,s,c)}}catch(D){if(typeof M>"u"||D.name!=="ErrnoError")throw D;return-D.Pa}},n:(r,s)=>{if(kn[r]&&(clearTimeout(kn[r].id),delete kn[r]),!s)return 0;var o=setTimeout(()=>{delete kn[r],Go(()=>fa(r,performance.now()))},s);return kn[r]={id:o,Hc:s},0},B:(r,s,o,c)=>{var f=new Date().getFullYear(),g=new Date(f,0,1).getTimezoneOffset();f=new Date(f,6,1).getTimezoneOffset(),A[r>>2]=60*Math.max(g,f),F[s>>2]=+(g!=f),s=E=>{var D=Math.abs(E);return`UTC${0<=E?"-":"+"}${String(Math.floor(D/60)).padStart(2,"0")}${String(D%60).padStart(2,"0")}`},r=s(g),s=s(f),f<g?(Ie(r,ee,o,17),Ie(s,ee,c,17)):(Ie(r,ee,c,17),Ie(s,ee,o,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:r=>{var s=ee.length;if(r>>>=0,2147483648<r)return!1;for(var o=1;4>=o;o*=2){var c=s*(1+.2/o);c=Math.min(c,r+100663296);e:{c=(Math.min(2147483648,65536*Math.ceil(Math.max(r,c)/65536))-Vr.buffer.byteLength+65535)/65536|0;try{Vr.grow(c),qs();var f=1;break e}catch{}f=void 0}if(f)return!0}return!1},E:(r,s)=>{var o=0,c=0,f;for(f of la()){var g=s+o;A[r+c>>2]=g,o+=Ie(f,ee,g,1/0)+1,c+=4}return 0},F:(r,s)=>{var o=la();A[r>>2]=o.length,r=0;for(var c of o)r+=Ft(c)+1;return A[s>>2]=r,0},e:function(r){try{var s=te(r);return Ci(s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return o.Pa}},p:function(r,s){try{var o=te(r);return Q[s]=o.Va?2:ie(o.mode)?3:(o.mode&61440)===40960?7:4,vn[s+2>>1]=0,ve[s+8>>3]=BigInt(0),ve[s+16>>3]=BigInt(0),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return c.Pa}},w:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var D=A[r>>2],O=A[r+4>>2];r+=8;var P=sa(f,Q,D,O,g);if(0>P){var z=-1;break e}if(s+=P,P<O)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(J){if(typeof M>"u"||J.name!=="ErrnoError")throw J;return J.Pa}},D:function(r,s,o,c){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return 61;var f=te(r);return ia(f,s,o),ve[c>>3]=BigInt(f.position),f.Eb&&s===0&&o===0&&(f.Eb=null),0}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},I:function(r){var o,c;try{var s=te(r);return(c=(o=s.Ma)==null?void 0:o.lb)==null?void 0:c.call(o,s)}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},t:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var D=A[r>>2],O=A[r+4>>2];r+=8;var P=aa(f,Q,D,O,g);if(0>P){var z=-1;break e}if(s+=P,P<O)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(J){if(typeof M>"u"||J.name!=="ErrnoError")throw J;return J.Pa}},k:ca};function Oi(){function r(){var f;if(h.calledRun=!0,!Dr){if(!h.noFSInit&&!Hs){var s,o;Hs=!0,s??(s=h.stdin),o??(o=h.stdout),c??(c=h.stderr),s?je("stdin",s):Pi("/dev/tty","/dev/stdin"),o?je("stdout",null,o):Pi("/dev/tty","/dev/stdout"),c?je("stderr",null,c):Pi("/dev/tty1","/dev/stderr"),Qt("/dev/stdin",0),Qt("/dev/stdout",1),Qt("/dev/stderr",1)}if(Ai.N(),Ks=!1,(f=h.onRuntimeInitialized)==null||f.call(h),h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var c=h.postRun.shift();Rs.push(c)}$s(Rs)}}if(0<ut)Sn=Oi;else{if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)$o();$s(Os),0<ut?Sn=Oi:h.setStatus?(h.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>h.setStatus(""),1),r()},1)):r()}}var Ai;return(async function(){var o;function r(c){var f;return c=Ai=c.exports,h._sqlite3_free=c.P,h._sqlite3_value_text=c.Q,h._sqlite3_prepare_v2=c.R,h._sqlite3_step=c.S,h._sqlite3_reset=c.T,h._sqlite3_exec=c.U,h._sqlite3_finalize=c.V,h._sqlite3_column_name=c.W,h._sqlite3_column_text=c.X,h._sqlite3_column_type=c.Y,h._sqlite3_errmsg=c.Z,h._sqlite3_clear_bindings=c._,h._sqlite3_value_blob=c.$,h._sqlite3_value_bytes=c.aa,h._sqlite3_value_double=c.ba,h._sqlite3_value_int=c.ca,h._sqlite3_value_type=c.da,h._sqlite3_result_blob=c.ea,h._sqlite3_result_double=c.fa,h._sqlite3_result_error=c.ga,h._sqlite3_result_int=c.ha,h._sqlite3_result_int64=c.ia,h._sqlite3_result_null=c.ja,h._sqlite3_result_text=c.ka,h._sqlite3_aggregate_context=c.la,h._sqlite3_column_count=c.ma,h._sqlite3_data_count=c.na,h._sqlite3_column_blob=c.oa,h._sqlite3_column_bytes=c.pa,h._sqlite3_column_double=c.qa,h._sqlite3_bind_blob=c.ra,h._sqlite3_bind_double=c.sa,h._sqlite3_bind_int=c.ta,h._sqlite3_bind_text=c.ua,h._sqlite3_bind_parameter_index=c.va,h._sqlite3_sql=c.wa,h._sqlite3_normalized_sql=c.xa,h._sqlite3_changes=c.ya,h._sqlite3_close_v2=c.za,h._sqlite3_create_function_v2=c.Aa,h._sqlite3_update_hook=c.Ba,h._sqlite3_open=c.Ca,Ur=h._malloc=c.Da,Tn=h._free=c.Ea,h._RegisterExtensionFunctions=c.Fa,da=c.Ga,fa=c.Ha,Wr=c.Ia,pt=c.Ja,Fr=c.Ka,Vr=c.M,He=c.O,qs(),ut--,(f=h.monitorRunDependencies)==null||f.call(h,ut),ut==0&&Sn&&(c=Sn,Sn=null,c()),Ai}ut++,(o=h.monitorRunDependencies)==null||o.call(h,ut);var s={a:Zo};return h.instantiateWasm?new Promise(c=>{h.instantiateWasm(s,(f,g)=>{c(r(f))})}):(Si??(Si=h.locateFile?h.locateFile("sql-wasm-browser.wasm",Fe):Fe+"sql-wasm-browser.wasm"),r((await Bo(s)).instance))})(),Oi(),y}),t)};n.exports=i,n.exports.default=i})(Vi)),Vi.exports}var Mu=Au();const zu=Ou(Mu),Uu=""+new URL("sql-wasm-UFUCzYNW.wasm",import.meta.url).href;let ji=null;async function Wu(){return ji||(ji=await zu({locateFile:()=>Uu})),ji}class Fu{constructor(){this.db=null,this.fileName=""}async open(e,t){const i=await Wu();this.db&&this.db.close(),this.db=new i.Database(new Uint8Array(e)),this.fileName=t}close(){this.db&&(this.db.close(),this.db=null,this.fileName="")}isOpen(){return!!this.db}_ensureOpen(){if(!this.db)throw new Error("No local database open.")}_runQuery(e){this._ensureOpen();const t=this.db.exec(e);if(!t.length)return{columns:[],rows:[]};const{columns:i,values:a}=t[0],l=a.map(d=>{const y={};return i.forEach((v,h)=>y[v]=d[h]),y});return{columns:i,rows:l}}async getTables(){const{rows:e}=this._runQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;");return e.map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){const{rows:t}=this._runQuery(`PRAGMA table_info(\`${e}\`);`);return t}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const{rows:l}=this._runQuery(`SELECT * FROM \`${e}\` LIMIT ${t} OFFSET ${i};`),d=this._runQuery(`SELECT COUNT(*) as count FROM \`${e}\`;`),y=d.rows.length?Number(d.rows[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){this._ensureOpen();const i=e.trim(),a=i.toUpperCase();if(["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(v=>a.startsWith(v))){this.db.run(i);const v=this.db.getRowsModified();return{columns:[],rows:[],row_count:v}}let l=i;t&&!a.includes("LIMIT")&&a.startsWith("SELECT")&&(l=`${i.replace(/;$/,"")} LIMIT ${t};`);const{columns:d,rows:y}=this._runQuery(l);return{columns:d,rows:y,row_count:y.length}}async checkDatabaseExists(){return this.isOpen()}}const I=new Ru,it=new Fu;let me=null,ne=0,X=100,ue=0,_o="query",Wa=null,Ye=[],G="",Tr="device",Ir=!1;function mn(){return Tr==="local"?it:I}const p=n=>document.getElementById(n);window.addEventListener("DOMContentLoaded",()=>{const n=localStorage.getItem("sqliteViewerQuery");n&&(p("queryInput").value=n),localStorage.getItem("sqliteViewerConfigCollapsed")==="true"&&p("configSection").classList.remove("expanded"),p("queryInput").addEventListener("input",e=>{localStorage.setItem("sqliteViewerQuery",e.target.value)}),document.addEventListener("keydown",e=>{e.key==="F5"&&(e.preventDefault(),Fa())}),p("tableSearch").addEventListener("input",e=>ih(e.target.value)),document.addEventListener("click",e=>{!e.target.closest("#searchResultsDropdown")&&!e.target.closest("#dbSearchInput")&&p("searchResultsDropdown").classList.remove("visible"),!e.target.closest("#packageDropdown")&&!e.target.closest("#packageSearchInput")&&p("packageDropdown").classList.remove("visible")}),p("configToggleBtn").addEventListener("click",Ju),p("usbConnectBtn").addEventListener("click",Gu),p("packageSearchInput").addEventListener("focus",Xu),p("packageSearchInput").addEventListener("input",Ls),p("packageClearBtn").addEventListener("click",e=>eh(e)),p("databaseSelect").addEventListener("change",()=>ks()),p("dbSearchInput").addEventListener("input",nh),p("dbSearchInput").addEventListener("keydown",e=>{e.key==="Enter"&&ps()}),p("dbSearchBtn").addEventListener("click",ps),p("executeBtn").addEventListener("click",()=>Fa()),p("executeAllBtn").addEventListener("click",lh),p("refreshTablesBtn").addEventListener("click",yh),p("clearQueryBtn").addEventListener("click",mh),p("formatQueryBtn").addEventListener("click",bh),p("downloadDbBtn").addEventListener("click",vh),p("openLocalBtn").addEventListener("click",()=>p("localFileInput").click()),p("localFileInput").addEventListener("change",Eh),p("closeLocalBtn").addEventListener("click",Sh),p("dismissUpdate").addEventListener("click",()=>p("updateBar").classList.remove("visible")),p("firstBtn").addEventListener("click",hh),p("prevBtn").addEventListener("click",dh),p("nextBtn").addEventListener("click",fh),p("lastBtn").addEventListener("click",ph),p("gotoPageBtn").addEventListener("click",Va),p("gotoPageInput").addEventListener("keypress",e=>{e.key==="Enter"&&Va()}),p("limitSelect").addEventListener("change",wh),p("deviceSelect").addEventListener("change",Hu),p("refreshDevicesBtn").addEventListener("click",Ku),document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",()=>gh(e.dataset.tab))}),Vu(),Lh()});async function Vu(){try{if(await I.connectBridge()){ju(),await Qu();return}}catch{}await Yu()}function ju(){const n=p("connectionStatus");n.textContent="ADB Bridge",n.className="connection-status bridge";const e=I.bridgeUrl?new URL(I.bridgeUrl).port:"15555";p("deviceStatus").textContent=`Bridge connected on :${e}`,p("deviceStatus").classList.add("ok");const t=p("usbConnectBtn");t.textContent="Disconnect Bridge",t.classList.add("disconnect")}async function Qu(){try{const n=await I.getDevices();if(n.length===0){p("deviceStatus").textContent="Bridge connected — no devices found. Plug in a phone.",p("deviceStatus").classList.remove("ok"),yn([]);return}const e=localStorage.getItem("sqliteViewerDevice"),i=n.find(a=>a.serial===e)||n[0];I.bridgeSerial=i.serial,localStorage.setItem("sqliteViewerDevice",i.serial),p("deviceStatus").textContent=i.display_name,p("deviceStatus").classList.add("ok"),yn(n,i.serial),i.display_name&&i.display_name.toLowerCase().includes("waydroid")&&await To(),await xs()}catch(n){p("deviceStatus").textContent=`Bridge error: ${n.message}`,p("deviceStatus").classList.remove("ok")}}function yn(n,e){const t=p("deviceSelect"),i=p("deviceSelectRow");t.innerHTML=n.map(a=>`<option value="${a.serial}"${a.serial===e?" selected":""}>${a.display_name}</option>`).join(""),i.style.display=n.length>=2?"flex":"none"}async function Hu(){const e=p("deviceSelect").value;if(e){localStorage.setItem("sqliteViewerDevice",e),Ir=!1,p("statusBar").textContent="Switching device...";try{if(I.mode==="bridge"){I.bridgeSerial=e;const i=(await I.getDevices()).find(a=>a.serial===e);i&&(p("deviceStatus").textContent=i.display_name,p("deviceStatus").classList.add("ok"),i.display_name&&i.display_name.toLowerCase().includes("waydroid")&&await To())}else{await I.connectBySerial(e);const t=I.getDeviceInfo();p("deviceStatus").textContent=t.display_name,p("deviceStatus").classList.add("ok")}G="",localStorage.removeItem("sqliteViewerPackage"),p("packageSearchInput").value="",p("packageComboWrapper").classList.remove("has-value"),p("databaseSelect").innerHTML='<option value="">Select a package first</option>',p("databaseSelect").disabled=!0,p("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Loading packages...</div>',await xs(),p("statusBar").textContent="Device switched"}catch(t){p("deviceStatus").textContent=`Error: ${t.message}`,p("deviceStatus").classList.remove("ok"),p("statusBar").textContent=`Error: ${t.message}`}}}async function Ku(){var t;const n=p("refreshDevicesBtn");n.disabled=!0;const e=n.textContent;n.textContent="…";try{const i=await I.getDevices(),a=I.mode==="bridge"?I.bridgeSerial:((t=I.device)==null?void 0:t.serial)||"";yn(i,a),i.length===0&&(p("deviceStatus").textContent="No devices found. Plug in a phone.",p("deviceStatus").classList.remove("ok"))}catch(i){p("deviceStatus").textContent=`Error: ${i.message}`}finally{n.disabled=!1,n.textContent=e}}async function To(){try{(await(await fetch(`${I.bridgeUrl}/api/waydroid/detect`)).json()).detected&&(Ir=!0,p("deviceStatus").textContent+=" (WayDroid host access)")}catch{}}async function Yu(){try{const n=await I.getDevices(),e=localStorage.getItem("sqliteViewerDevice"),i=(e?n.find(a=>a.serial===e):null)||(n.length===1?n[0]:null);i?(p("deviceStatus").textContent="Reconnecting...",await I.connectBySerial(i.serial),await Io(),yn(n,i.serial)):n.length>=2&&(yn(n,""),p("deviceStatus").textContent=`${n.length} paired devices — pick one to connect`)}catch{}}async function Gu(){const n=p("usbConnectBtn");if(I.mode==="bridge"||I.adb){await I.disconnect(),n.textContent="Connect Device",n.classList.remove("disconnect"),p("deviceStatus").textContent="No device connected",p("deviceStatus").classList.remove("ok"),p("connectionStatus").textContent="Disconnected",p("connectionStatus").className="connection-status disconnected",p("packageSearchInput").disabled=!0,p("packageSearchInput").placeholder="Connect device first...",p("databaseSelect").disabled=!0,p("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>',p("deviceSelectRow").style.display="none";return}n.textContent="Connecting...",p("deviceStatus").textContent="Check your phone — approve USB debugging if prompted";try{await I.requestDevice(),await Io()}catch(e){n.textContent="Connect Device",p("deviceStatus").textContent=`Error: ${e.message}`,p("deviceStatus").classList.remove("ok")}}async function Io(){const n=I.getDeviceInfo(),e=p("usbConnectBtn");e.textContent="Disconnect",e.classList.add("disconnect"),p("deviceStatus").textContent=n.display_name,p("deviceStatus").classList.add("ok"),p("connectionStatus").textContent="Connected",p("connectionStatus").className="connection-status connected",localStorage.setItem("sqliteViewerDevice",n.serial);try{const t=await I.getDevices();yn(t,n.serial)}catch{}await xs()}function Ju(){const n=p("configSection");n.classList.toggle("expanded"),localStorage.setItem("sqliteViewerConfigCollapsed",!n.classList.contains("expanded"))}async function xs(){const n=p("packageSearchInput"),e=p("packageComboWrapper");n.disabled=!1,n.placeholder="Scanning debuggable apps...",n.value="",e.classList.remove("has-value"),G="",Ye=[];try{Ir?Ye=(await(await fetch(`${I.bridgeUrl}/api/waydroid/packages`)).json()).packages||[]:Ye=await I.getPackages(),n.placeholder=`Search ${Ye.length} apps...`;const t=localStorage.getItem("sqliteViewerPackage");t&&Ye.includes(t)&&(G=t,n.value=t,e.classList.add("has-value")),await Do(!0)}catch(t){n.placeholder=`Failed: ${t.message}`}}function Xu(){const n=p("packageSearchInput");G&&n.value===G&&n.select(),Ls()}function Ls(){const n=p("packageSearchInput"),e=p("packageDropdown"),t=n.value.trim().toLowerCase(),i=t?Ye.filter(a=>a.toLowerCase().includes(t)):Ye;i.length===0?e.innerHTML='<div class="combo-empty">No matching packages</div>':(e.innerHTML=i.map(a=>`<div class="combo-item${a===G?" active":""}" data-pkg="${a}">${a}</div>`).join(""),e.querySelectorAll(".combo-item").forEach(a=>{a.addEventListener("click",()=>Zu(a.dataset.pkg))})),e.classList.add("visible")}async function Zu(n){const e=p("packageSearchInput"),t=p("packageComboWrapper"),i=p("packageDropdown");G=n,e.value=n,t.classList.add("has-value"),i.classList.remove("visible"),await Do()}async function eh(n){n&&n.stopPropagation();const e=p("packageSearchInput"),t=p("packageComboWrapper");G="",e.value="",t.classList.remove("has-value"),e.focus(),Ls(),p("databaseSelect").innerHTML='<option value="">Select a package first</option>',p("databaseSelect").disabled=!0,localStorage.removeItem("sqliteViewerPackage")}async function Do(n=!1){if(!G){p("databaseSelect").innerHTML='<option value="">Select a package first</option>',p("databaseSelect").disabled=!0;return}localStorage.setItem("sqliteViewerPackage",G),I.setPackage(G),await th(n)}async function th(n=!1){const e=p("databaseSelect");e.disabled=!1,e.innerHTML='<option value="">Loading databases...</option>';try{let t;Ir?t=(await(await fetch(`${I.bridgeUrl}/api/waydroid/databases`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:G})})).json()).databases||[]:t=await I.getDatabases(G);const i=localStorage.getItem("sqliteViewerDatabase");e.innerHTML='<option value="">-- Select database --</option>',t.forEach(a=>{const l=document.createElement("option");l.value=a.name,l.textContent=`${a.name} (${a.path})`,l.dataset.path=a.path,i&&a.name===i&&(l.selected=!0),e.appendChild(l)}),await ks(n)}catch(t){e.innerHTML=`<option value="">Error: ${t.message}</option>`}}async function ks(n=!1){var l;const e=p("databaseSelect"),t=e.value;if(!t){n||(p("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Select a database to view tables</div>');return}const i=e.options[e.selectedIndex],a=((l=i==null?void 0:i.dataset)==null?void 0:l.path)||"";if(localStorage.setItem("sqliteViewerDatabase",t),I.setDatabase(t,a),Ir){p("statusBar").textContent=`Loading ${t} from WayDroid...`;try{const d=await fetch(`${I.bridgeUrl}/api/waydroid/read-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:G,dbPath:a})});if(!d.ok){const v=await d.json().catch(()=>({}));throw new Error(v.error||`HTTP ${d.status}`)}const y=await d.arrayBuffer();await it.open(y,t),Tr="local",p("statusBar").textContent=`Loaded ${t} from WayDroid host`}catch(d){p("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load WayDroid DB: ${d.message}</div>`,p("statusBar").textContent=`Error: ${d.message}`;return}}await No(),await _s()}function nh(){if(clearTimeout(Wa),p("dbSearchInput").value.trim().length<1){p("searchResultsDropdown").classList.remove("visible");return}Wa=setTimeout(()=>ps(),400)}async function ps(){const n=p("dbSearchInput").value.trim(),e=p("searchResultsDropdown");if(!G){e.innerHTML='<div class="search-result-item"><span class="file-name">Select a package first</span></div>',e.classList.add("visible");return}if(!n){e.classList.remove("visible");return}e.innerHTML='<div class="search-result-item"><span class="file-name">Searching...</span></div>',e.classList.add("visible");try{const t=await I.searchDatabases(G,n);if(t.length===0){e.innerHTML='<div class="search-result-item"><span class="file-name">No databases found</span></div>';return}e.innerHTML=t.map(i=>`<div class="search-result-item" data-name="${i.name}" data-path="${i.path}">
|
|
17
|
+
<div class="file-name">${i.name}</div>
|
|
18
|
+
<div class="file-path">${i.path}</div>
|
|
19
|
+
</div>`).join(""),e.querySelectorAll(".search-result-item").forEach(i=>{i.addEventListener("click",()=>rh(i.dataset.name,i.dataset.path))})}catch(t){e.innerHTML=`<div class="search-result-item"><span class="file-name">Search failed: ${t.message}</span></div>`}}async function rh(n,e){p("searchResultsDropdown").classList.remove("visible"),p("dbSearchInput").value="";const t=p("databaseSelect");let i=!1;for(let a=0;a<t.options.length;a++)if(t.options[a].value===n){t.value=n,i=!0;break}if(!i){const a=document.createElement("option");a.value=n,a.textContent=`${n} (${e})`,a.dataset.path=e,t.appendChild(a),t.value=n}await ks()}async function No(){const n=p("connectionStatus");if(!(I.mode==="bridge"?!!I.bridgeUrl:!!I.adb)){n.textContent="Disconnected",n.className="connection-status disconnected";return}try{await I.checkDatabaseExists()?(n.textContent=I.mode==="bridge"?"ADB Bridge":"Connected",n.className=I.mode==="bridge"?"connection-status bridge":"connection-status connected"):(n.textContent="DB not found",n.className="connection-status disconnected")}catch{n.textContent=I.mode==="bridge"?"ADB Bridge":"Connected",n.className=I.mode==="bridge"?"connection-status bridge":"connection-status connected"}}async function _s(){const n=p("tablesList");n.innerHTML='<div class="loading">Loading tables...</div>';try{const e=await mn().getTables();if(e.length===0){n.innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">No tables found</div>';return}n.innerHTML=e.map(t=>`
|
|
20
|
+
<div class="table-item" data-table="${t.name}">
|
|
21
|
+
<div class="accordion-header">
|
|
22
|
+
<span class="arrow">▶</span>
|
|
23
|
+
<div class="table-item-name">${t.name}</div>
|
|
24
|
+
<button class="query-btn" data-select-table="${t.name}">Query</button>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="accordion-content" id="structure-${t.name}">
|
|
27
|
+
<div style="color: #95a5a6; font-style: italic;">Loading columns...</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>`).join(""),n.querySelectorAll(".accordion-header").forEach(t=>{t.addEventListener("click",i=>{if(i.target.classList.contains("query-btn"))return;const a=t.closest(".table-item").dataset.table;ah(t,a)})}),n.querySelectorAll(".query-btn").forEach(t=>{t.addEventListener("click",i=>{i.stopPropagation(),sh(t.dataset.selectTable)})})}catch(e){n.innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load tables: ${e.message}</div>`}}function ih(n){const e=document.querySelectorAll(".table-item"),t=n.toLowerCase();e.forEach(i=>{const a=i.dataset.table.toLowerCase();i.style.display=a.includes(t)?"block":"none"})}async function sh(n){me=n,ne=0,document.querySelectorAll(".table-item").forEach(a=>{const l=a.querySelector(".accordion-header"),d=a.dataset.table===n;a.style.borderLeftColor=d?"#3498db":"transparent",l.style.background=d?"#34495e":""});const e=p("queryInput"),t=e.value.trim(),i=`SELECT * FROM ${n}`;e.value=t?t+`
|
|
30
|
+
|
|
31
|
+
`+i:i,localStorage.setItem("sqliteViewerQuery",e.value),_o==="query"?await ot(n):await Po(n)}async function ah(n,e){const t=n.closest(".table-item"),i=t.querySelector(".accordion-content"),a=t.classList.contains("expanded");t.classList.toggle("expanded"),!a&&!i.dataset.loaded&&await oh(e,i)}async function oh(n,e){try{const t=await mn().getTableStructure(n);if(e.dataset.loaded="true",!t||t.length===0){e.innerHTML='<div style="color: #95a5a6">No columns</div>';return}e.innerHTML=t.map(i=>`
|
|
32
|
+
<div class="column-item">
|
|
33
|
+
<span>${i.pk?'<span class="pk-badge" title="Primary Key">PK</span>':""}${i.name}</span>
|
|
34
|
+
<span class="column-type">${i.type}</span>
|
|
35
|
+
</div>`).join("")}catch(t){e.innerHTML=`<div style="color: #e74c3c">Error: ${t.message}</div>`}}async function ot(n,e=0){const t=p("resultsContainer"),i=p("statusBar"),a=p("welcomeMessage");t.innerHTML='<div class="loading">Loading data...</div>',a.style.display="none";try{const l=await mn().getTableData(n,X,e);ne=e,ue=l.total_count,Ts(l.columns,l.rows),uh(),i.textContent=`${l.row_count} rows retrieved (${ue.toLocaleString()} total)`}catch(l){t.innerHTML=`<div class="error">Failed to load data: ${l.message}</div>`}}async function Po(n){const e=p("structureContainer");e.innerHTML='<div class="loading">Loading structure...</div>';try{const t=await mn().getTableStructure(n),i=["cid","name","type","notnull","dflt_value","pk"];e.innerHTML=`
|
|
36
|
+
<table>
|
|
37
|
+
<thead><tr>${i.map(a=>`<th>${a}</th>`).join("")}</tr></thead>
|
|
38
|
+
<tbody>
|
|
39
|
+
${t.map(a=>`<tr>${i.map(l=>`<td>${a[l]??""}</td>`).join("")}</tr>`).join("")}
|
|
40
|
+
</tbody>
|
|
41
|
+
</table>`}catch(t){e.innerHTML=`<div class="error">Failed to load structure: ${t.message}</div>`}}function ch(){const n=p("queryInput"),e=n.selectionStart,t=n.selectionEnd;return e!==t?n.value.substring(e,t).trim():null}async function Fa(){const n=ch(),e=p("queryInput").value.trim(),t=n||e,i=!!n,a=p("resultsContainer"),l=p("statusBar"),d=p("welcomeMessage");if(!t){alert("Please enter a SQL query");return}a.innerHTML='<div class="loading">Executing query...</div>',d.style.display="none",l.textContent=i?"Executing selected...":"Executing...";try{const y=await mn().executeQuery(t,X);Ts(y.columns,y.rows),l.textContent=i?`${y.row_count} rows retrieved (selected query)`:`${y.row_count} rows retrieved`,p("pagination").style.display="none"}catch(y){a.innerHTML=`<div class="error">Failed to execute query: ${y.message}</div>`,l.textContent="Error"}}async function lh(){const n=p("queryInput").value.trim(),e=p("resultsContainer"),t=p("statusBar"),i=p("welcomeMessage");if(!n){alert("Please enter a SQL query");return}e.innerHTML='<div class="loading">Executing query...</div>',i.style.display="none",t.textContent="Executing...";try{const a=await mn().executeQuery(n,X);Ts(a.columns,a.rows),t.textContent=`${a.row_count} rows retrieved`,p("pagination").style.display="none"}catch(a){e.innerHTML=`<div class="error">Failed to execute query: ${a.message}</div>`,t.textContent="Error"}}function Ts(n,e){const t=p("resultsContainer");if(!e||e.length===0){t.innerHTML='<div class="info">No results found</div>';return}const i=`
|
|
42
|
+
<div style="padding: 15px; background: #f8f9fa; border-bottom: 2px solid #dee2e6; font-size: 13px;">
|
|
43
|
+
<strong>Table Information:</strong>
|
|
44
|
+
<span style="margin-left: 20px;"><strong>Total Rows:</strong> ${ue?ue.toLocaleString():e.length.toLocaleString()}</span>
|
|
45
|
+
<span style="margin-left: 20px;"><strong>Total Columns:</strong> ${n.length}</span>
|
|
46
|
+
<span style="margin-left: 20px;"><strong>Columns:</strong> ${n.join(", ")}</span>
|
|
47
|
+
</div>`;t.innerHTML=i+`<table>
|
|
48
|
+
<thead>
|
|
49
|
+
<tr>
|
|
50
|
+
<th style="background: #e9ecef; color: #495057; font-weight: 700;">#</th>
|
|
51
|
+
${n.map(a=>`<th style="background: #e9ecef; color: #495057; font-weight: 700;">${a}</th>`).join("")}
|
|
52
|
+
</tr>
|
|
53
|
+
</thead>
|
|
54
|
+
<tbody>
|
|
55
|
+
${e.map((a,l)=>`
|
|
56
|
+
<tr>
|
|
57
|
+
<td style="background: #f8f9fa; font-weight: 600; color: #6c757d;">${ne+l+1}</td>
|
|
58
|
+
${n.map(d=>`<td>${a[d]??'<span style="color: #999; font-style: italic;">NULL</span>'}</td>`).join("")}
|
|
59
|
+
</tr>`).join("")}
|
|
60
|
+
</tbody>
|
|
61
|
+
</table>`}function uh(){const n=p("pagination");n.style.display="flex";const e=Math.floor(ne/X)+1,t=Math.ceil(ue/X);p("firstBtn").disabled=ne===0,p("prevBtn").disabled=ne===0,p("nextBtn").disabled=ne+X>=ue,p("lastBtn").disabled=ne+X>=ue,p("gotoPageInput").max=t,p("gotoPageInput").placeholder=`1-${t}`,p("pageInfo").textContent=`Page ${e} of ${t} (${ue.toLocaleString()} total rows)`}function hh(){ne>0&&ot(me,0)}function dh(){ne>0&&ot(me,ne-X)}function fh(){ne+X<ue&&ot(me,ne+X)}function ph(){if(ne+X<ue){const n=Math.floor((ue-1)/X)*X;ot(me,n)}}function Va(){const n=parseInt(p("gotoPageInput").value),e=Math.ceil(ue/X);n>=1&&n<=e?(ot(me,(n-1)*X),p("gotoPageInput").value=""):alert(`Please enter a page number between 1 and ${e}`)}function wh(){const n=p("limitSelect").value;n==="all"?X=ue||1e5:X=parseInt(n),ne=0,me&&ot(me,0)}function gh(n){_o=n,document.querySelectorAll(".tab").forEach(e=>{e.classList.toggle("active",e.dataset.tab===n)}),document.querySelectorAll(".tab-content").forEach(e=>e.classList.remove("active")),n==="query"?(p("queryTab").classList.add("active"),me&&ot(me)):n==="structure"&&(p("structureTab").classList.add("active"),me&&Po(me))}async function yh(){const n=p("statusBar");n.textContent="Refreshing tables...",I.dbPath="",await _s(),await No(),n.textContent="Tables refreshed",setTimeout(()=>n.textContent="Ready",3e3)}function mh(){p("queryInput").value="",p("resultsContainer").innerHTML="",p("welcomeMessage").style.display="block",p("statusBar").textContent="Ready",localStorage.removeItem("sqliteViewerQuery")}function bh(){const n=p("queryInput");let e=n.value;e=e.replace(/\s+/g," ").trim(),e=e.replace(/\b(SELECT|FROM|WHERE|AND|OR|ORDER BY|GROUP BY|LIMIT|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN)\b/gi,`
|
|
62
|
+
$1`),e=e.replace(/,/g,`,
|
|
63
|
+
`),n.value=e}async function vh(){const n=p("statusBar");if(Tr==="local"&&it.isOpen()){const e=it.db.export(),t=new Blob([e],{type:"application/octet-stream"});ja(t,it.fileName||"database.db"),n.textContent=`Downloaded ${it.fileName}`;return}if(I.mode!=="bridge"||!I.bridgeUrl){n.textContent="Download requires ADB Bridge connection";return}if(!G||!I.dbPath){n.textContent="Select a package and database first";return}n.textContent="Downloading database...";try{const e=await fetch(`${I.bridgeUrl}/api/pull-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:I.bridgeSerial||void 0,packageName:G,dbPath:I.dbPath})});if(!e.ok){const a=await e.json().catch(()=>({}));throw new Error(a.error||`HTTP ${e.status}`)}const t=await e.blob(),i=I.dbName||"database.db";ja(t,i),n.textContent=`Downloaded ${i}`}catch(e){n.textContent=`Download failed: ${e.message}`}}function ja(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}async function Eh(n){const e=n.target.files[0];if(!e)return;const t=p("statusBar");t.textContent=`Opening ${e.name}...`;try{const i=await e.arrayBuffer();await it.open(i,e.name),Tr="local";const a=p("connectionStatus");a.textContent="Local File",a.className="connection-status bridge",p("localFileName").textContent=e.name,p("localFileBadge").classList.add("visible"),p("packageSearchInput").disabled=!0,p("packageSearchInput").placeholder="Local file mode",p("databaseSelect").disabled=!0,p("databaseSelect").innerHTML=`<option value="">${e.name}</option>`,await _s(),t.textContent=`Opened ${e.name}`}catch(i){t.textContent=`Failed to open file: ${i.message}`,p("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to open file: ${i.message}</div>`}n.target.value=""}function Sh(){if(it.close(),Tr="device",p("localFileBadge").classList.remove("visible"),p("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>',p("resultsContainer").innerHTML="",p("welcomeMessage").style.display="block",p("statusBar").textContent="Ready",p("pagination").style.display="none",I.mode==="bridge"?!!I.bridgeUrl:!!I.adb){const e=p("connectionStatus");e.textContent=I.mode==="bridge"?"ADB Bridge":"Connected",e.className=I.mode==="bridge"?"connection-status bridge":"connection-status connected",p("packageSearchInput").disabled=!1,p("packageSearchInput").placeholder=`Search ${Ye.length} debuggable apps...`,p("databaseSelect").disabled=!1}else p("connectionStatus").textContent="Disconnected",p("connectionStatus").className="connection-status disconnected",p("packageSearchInput").disabled=!0,p("packageSearchInput").placeholder="Connect device first...",p("databaseSelect").disabled=!0,p("databaseSelect").innerHTML='<option value="">Select a package first</option>'}const Qi="1.2.0",xh="amitwinit/SQLite-DevTools-Mobile-ReactNative";async function Lh(){if(!navigator.userAgent.includes("Electron"))try{const n=await fetch(`https://api.github.com/repos/${xh}/releases/latest`,{signal:AbortSignal.timeout(5e3)});if(!n.ok)return;const e=await n.json(),t=(e.tag_name||"").replace(/^v/,"");if(t&&t!==Qi&&kh(t,Qi)){const i=p("updateBar");p("updateMessage").textContent=`Version ${t} is available (you have ${Qi})`;const a=p("updateAction");a.textContent="Download",a.href=e.html_url,a.target="_blank",i.classList.add("visible")}}catch{}}function kh(n,e){const t=n.split(".").map(Number),i=e.split(".").map(Number);for(let a=0;a<Math.max(t.length,i.length);a++){const l=t[a]||0,d=i[a]||0;if(l>d)return!0;if(l<d)return!1}return!1}
|
package/dist/index.html
CHANGED
|
@@ -773,7 +773,7 @@
|
|
|
773
773
|
opacity: 1;
|
|
774
774
|
}
|
|
775
775
|
</style>
|
|
776
|
-
<script type="module" crossorigin src="./assets/index-
|
|
776
|
+
<script type="module" crossorigin src="./assets/index-ljoNzx66.js"></script>
|
|
777
777
|
</head>
|
|
778
778
|
|
|
779
779
|
<body>
|
|
@@ -811,11 +811,15 @@
|
|
|
811
811
|
<div class="config-row">
|
|
812
812
|
<div class="config-group">
|
|
813
813
|
<label>USB Device</label>
|
|
814
|
-
<div style="display: flex; gap: 8px; align-items: center;">
|
|
814
|
+
<div style="display: flex; gap: 8px; align-items: center; flex-wrap: wrap;">
|
|
815
815
|
<button class="usb-connect-btn" id="usbConnectBtn">Connect Device</button>
|
|
816
816
|
<button class="upload-btn" id="openLocalBtn" title="Open a .db/.sqlite file from your computer">Open Local DB</button>
|
|
817
817
|
<input type="file" id="localFileInput" accept=".db,.sqlite,.sqlite3" style="display:none">
|
|
818
818
|
</div>
|
|
819
|
+
<div id="deviceSelectRow" style="display: none; margin-top: 6px; gap: 6px; align-items: center;">
|
|
820
|
+
<select id="deviceSelect" style="flex: 1; padding: 6px 10px; border: 1px solid #ced4da; border-radius: 4px; background: white; color: #495057; font-size: 12px;"></select>
|
|
821
|
+
<button id="refreshDevicesBtn" title="Refresh device list" style="padding: 6px 10px; border: 1px solid #ced4da; border-radius: 4px; background: white; cursor: pointer; font-size: 12px;">↻</button>
|
|
822
|
+
</div>
|
|
819
823
|
<div class="device-status" id="deviceStatus">No device connected</div>
|
|
820
824
|
<div class="local-file-badge" id="localFileBadge">
|
|
821
825
|
<span id="localFileName"></span>
|
|
@@ -871,10 +875,16 @@
|
|
|
871
875
|
<div class="tab-content active" id="queryTab">
|
|
872
876
|
<div class="content-area">
|
|
873
877
|
<div class="info" id="welcomeMessage">
|
|
874
|
-
<strong>Welcome to ADB SQLite Query Viewer!</strong><br>
|
|
875
|
-
<b>ADB Bridge (recommended for RN devs):</b>
|
|
876
|
-
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/adb-bridge.exe" style="color: #8e44ad; font-weight: 600;">
|
|
877
|
-
|
|
878
|
+
<strong>Welcome to ADB SQLite Query Viewer!</strong><br><br>
|
|
879
|
+
<b>ADB Bridge (recommended for RN devs):</b> Download for your platform, run it, and this page auto-connects.<br>
|
|
880
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/adb-bridge.exe" style="color: #8e44ad; font-weight: 600;">Windows</a> |
|
|
881
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/adb-bridge-macos" style="color: #8e44ad; font-weight: 600;">macOS</a> |
|
|
882
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/adb-bridge-linux" style="color: #8e44ad; font-weight: 600;">Linux</a><br><br>
|
|
883
|
+
<b>Desktop App (ADB bundled, no SDK needed):</b><br>
|
|
884
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-win.exe" style="color: #2980b9; font-weight: 600;">Windows .exe</a> |
|
|
885
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-mac-arm64.dmg" style="color: #2980b9; font-weight: 600;">macOS (Apple Silicon)</a> |
|
|
886
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-mac-x64.dmg" style="color: #2980b9; font-weight: 600;">macOS (Intel)</a> |
|
|
887
|
+
<a href="https://github.com/amitwinit/SQLite-DevTools-Mobile-ReactNative/releases/latest/download/ADB-SQLite-DevTools-linux.AppImage" style="color: #2980b9; font-weight: 600;">Linux .AppImage</a><br><br>
|
|
878
888
|
<b>WebUSB:</b> Click "Connect Device" (requires <code>adb kill-server</code> first).<br>
|
|
879
889
|
Select a package and database, then browse tables or write SQL queries.<br>
|
|
880
890
|
<small>WebUSB requires Chrome or Edge. Device must have USB debugging enabled.</small>
|
package/electron/main.cjs
CHANGED
|
@@ -75,12 +75,40 @@ function setupAutoUpdater() {
|
|
|
75
75
|
// ── Application Menu ────────────────────────────────
|
|
76
76
|
|
|
77
77
|
function buildMenu() {
|
|
78
|
+
const isMac = process.platform === "darwin";
|
|
78
79
|
const template = [
|
|
80
|
+
...(isMac
|
|
81
|
+
? [
|
|
82
|
+
{
|
|
83
|
+
label: app.name,
|
|
84
|
+
submenu: [
|
|
85
|
+
{
|
|
86
|
+
label: "About ADB SQLite DevTools",
|
|
87
|
+
click: () => {
|
|
88
|
+
dialog.showMessageBox(mainWindow, {
|
|
89
|
+
type: "info",
|
|
90
|
+
title: "About ADB SQLite DevTools",
|
|
91
|
+
message: `ADB SQLite DevTools v${app.getVersion()}`,
|
|
92
|
+
detail:
|
|
93
|
+
"View and query SQLite databases on Android devices.",
|
|
94
|
+
});
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{ type: "separator" },
|
|
98
|
+
{ role: "services" },
|
|
99
|
+
{ type: "separator" },
|
|
100
|
+
{ role: "hide" },
|
|
101
|
+
{ role: "hideOthers" },
|
|
102
|
+
{ role: "unhide" },
|
|
103
|
+
{ type: "separator" },
|
|
104
|
+
{ role: "quit" },
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
]
|
|
108
|
+
: []),
|
|
79
109
|
{
|
|
80
110
|
label: "File",
|
|
81
|
-
submenu: [
|
|
82
|
-
{ role: "quit" },
|
|
83
|
-
],
|
|
111
|
+
submenu: [isMac ? { role: "close" } : { role: "quit" }],
|
|
84
112
|
},
|
|
85
113
|
{
|
|
86
114
|
label: "View",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adb-sqlite-viewer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "ADB SQLite database viewer for Android — inspect tables, schemas, and run queries on-device",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "electron/main.cjs",
|
|
@@ -81,12 +81,27 @@
|
|
|
81
81
|
"to": "sqlite3-arm64"
|
|
82
82
|
}
|
|
83
83
|
],
|
|
84
|
+
"mac": {
|
|
85
|
+
"target": [
|
|
86
|
+
{
|
|
87
|
+
"target": "dmg",
|
|
88
|
+
"arch": [
|
|
89
|
+
"x64",
|
|
90
|
+
"arm64"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"category": "public.app-category.developer-tools",
|
|
95
|
+
"artifactName": "ADB-SQLite-DevTools-mac-${arch}.${ext}"
|
|
96
|
+
},
|
|
84
97
|
"win": {
|
|
85
|
-
"target": "nsis"
|
|
98
|
+
"target": "nsis",
|
|
99
|
+
"artifactName": "ADB-SQLite-DevTools-win.${ext}"
|
|
86
100
|
},
|
|
87
101
|
"linux": {
|
|
88
102
|
"target": "AppImage",
|
|
89
|
-
"category": "Development"
|
|
103
|
+
"category": "Development",
|
|
104
|
+
"artifactName": "ADB-SQLite-DevTools-linux.${ext}"
|
|
90
105
|
},
|
|
91
106
|
"publish": {
|
|
92
107
|
"provider": "github",
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
var Lc=Object.defineProperty;var ka=n=>{throw TypeError(n)};var _c=(n,e,t)=>e in n?Lc(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var k=(n,e,t)=>_c(n,typeof e!="symbol"?e+"":e,t),Mi=(n,e,t)=>e.has(n)||ka("Cannot "+t);var u=(n,e,t)=>(Mi(n,e,"read from private field"),t?t.call(n):e.get(n)),m=(n,e,t)=>e.has(n)?ka("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),b=(n,e,t,i)=>(Mi(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),C=(n,e,t)=>(Mi(n,e,"access private method"),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function t(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(a){if(a.ep)return;a.ep=!0;const l=t(a);fetch(a.href,l)}})();class ws{constructor(e){k(this,"TValue");k(this,"TOmitInitKey");k(this,"options");this.options=e}}class Mt{constructor(e,t,i,a){k(this,"definition");k(this,"options");k(this,"struct");k(this,"value");this.definition=e,this.options=t,this.struct=i,this.value=a}get hasCustomAccessors(){return this.get!==Mt.prototype.get||this.set!==Mt.prototype.set}getSize(){return this.definition.getSize()}get(){return this.value}set(e){this.value=e}}const Tc={littleEndian:!1};class gs extends Error{constructor(){super("ExactReadable ended"),Object.setPrototypeOf(this,new.target.prototype)}}const ys=Symbol("struct-value");function Ic(n){return typeof n=="object"&&n!==null&&ys in n}class La{constructor(e){k(this,"fieldValues",{});k(this,"value");this.value=Object.create(e),Object.defineProperty(this.value,ys,{enumerable:!1,value:this})}set(e,t){this.fieldValues[e]=t,t.hasCustomAccessors?Object.defineProperty(this.value,e,{configurable:!0,enumerable:!0,get(){return t.get()},set(i){t.set(i)}}):this.value[e]=t.get()}get(e){return this.fieldValues[e]}}const We={reject(n){return new Ta(n)},resolve(n){return typeof n=="object"&&n!==null&&typeof n.then=="function"?n instanceof jr||n instanceof _a||n instanceof Ta?n:new jr(n):new _a(n)},try(n){try{return We.resolve(n())}catch(e){return We.reject(e)}}};var Jt;const Ts=class Ts{constructor(e){m(this,Jt);b(this,Jt,e)}then(e,t){return new Ts(u(this,Jt).then(e,t))}valueOrPromise(){return u(this,Jt)}};Jt=new WeakMap;let jr=Ts;var Xt;class _a{constructor(e){m(this,Xt);b(this,Xt,e)}then(e){return e?We.try(()=>e(u(this,Xt))):this}valueOrPromise(){return u(this,Xt)}}Xt=new WeakMap;var Zt;class Ta{constructor(e){m(this,Zt);b(this,Zt,e)}then(e,t){return t?We.try(()=>t(u(this,Zt))):this}valueOrPromise(){throw u(this,Zt)}}Zt=new WeakMap;function Dc(n,e,t){return t?(n[e]|n[e+1]<<8)<<16>>16:(n[e]<<8|n[e+1])<<16>>16}function Nc(n,e,t){return t?n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24:n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3]}function Pc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7]<<24)<<32n:BigInt(n[e]<<24)<<32n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function qc(n,e,t){n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)}function Cc(n,e,t){n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn)}function Bc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}function Rc(n,e){return n[e]<<24>>24}function Oc(n,e,t){return t?n[e]|n[e+1]<<8:n[e+1]|n[e]<<8}function wi(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0}function $c(n,e,t){return t?(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0:(n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3])>>>0}function Ac(n,e,t){n[e]=t,n[e+1]=t>>8,n[e+2]=t>>16,n[e+3]=t>>24}function Mc(n,e){return BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n}function zc(n,e){return BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Uc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n:BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Wc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}const Yt=class Yt{constructor(e,t,i){k(this,"TTypeScriptType");k(this,"size");k(this,"deserialize");k(this,"serialize");this.size=e,this.deserialize=t,this.serialize=i}};k(Yt,"Int64",new Yt(8,Pc,Bc)),k(Yt,"Uint64",new Yt(8,Uc,Wc));let Qr=Yt;class Fc extends ws{constructor(t,i){super();k(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new Vc(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,0,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class Vc extends Mt{serialize(e,t,i){this.definition.variant.serialize(t,i,this.value,this.options.littleEndian)}}const{TextEncoder:jc,TextDecoder:Qc}=globalThis,Hc=new jc,Kc=new Qc;function qe(n){return Hc.encode(n)}function zt(n){return Kc.decode(n)}class Qa{constructor(){k(this,"TTypeScriptType")}}const ri=class ri extends Qa{constructor(){super()}toBuffer(e){return e}toValue(e){return e}getSize(e){return e.length}};k(ri,"Instance",new ri);let Qi=ri;const ii=class ii extends Qa{toBuffer(e){return qe(e)}toValue(e){return zt(e)}getSize(){}};k(ii,"Instance",new ii);let Hi=ii;const Ne=new Uint8Array(0);class Ha extends ws{constructor(t,i){super(i);k(this,"converter");k(this,"TTypeScriptType");this.converter=t}getDeserializeSize(t){return this.getSize()}create(t,i,a,l){return new Ka(this,t,i,a,l)}deserialize(t,i,a){return We.try(()=>{const l=this.getDeserializeSize(a);return l===0?Ne:i.readExactly(l)}).then(l=>{const d=this.converter.toValue(l);return this.create(t,a,d,l)}).valueOrPromise()}}class Ka extends Mt{constructor(t,i,a,l,d){super(t,i,a,l);k(this,"array");this.array=d}set(t){super.set(t),this.array=void 0}serialize(t,i,a){this.array??(this.array=this.definition.converter.toBuffer(this.value)),i.set(this.array,a)}}class Yc extends Ha{getSize(){return this.options.length}}class Gc extends Ha{getSize(){return 0}getDeserializeSize(e){let t=e.value[this.options.lengthField];return typeof t=="string"&&(t=Number.parseInt(t,this.options.lengthFieldRadix??10)),t}create(e,t,i,a){return new Jc(this,e,t,i,a)}}var si,Ya;class Jc extends Ka{constructor(t,i,a,l,d){super(t,i,a,l,d);m(this,si);k(this,"length");k(this,"lengthFieldValue");d&&(this.length=d.length);const y=this.definition.options.lengthField,v=a.get(y);this.lengthFieldValue=new Xc(v,this),a.set(y,this.lengthFieldValue)}getSize(){return this.length===void 0&&(this.length=C(this,si,Ya).call(this)),this.length===void 0&&(this.array=this.definition.converter.toBuffer(this.value),this.length=this.array.length),this.length}set(t){super.set(t),this.array=void 0,this.length=void 0}}si=new WeakSet,Ya=function(){const t=this.definition.converter.getSize(this.value);if(t!==void 0&&t<0)throw new Error("Invalid length");return t};class Xc extends Mt{constructor(t,i){super(t.definition,t.options,t.struct,0);k(this,"originalValue");k(this,"bufferValue");this.originalValue=t,this.bufferValue=i}getSize(){return this.originalValue.getSize()}get(){let t=this.bufferValue.getSize();return typeof this.originalValue.get()=="string"&&(t=t.toString(this.bufferValue.definition.options.lengthFieldRadix??10)),t}set(){}serialize(t,i,a){this.originalValue.set(this.get()),this.originalValue.serialize(t,i,a)}}var Ke;(function(n){n.Uint8={signed:!1,size:1,deserialize(e){return e[0]},serialize(e,t,i){e.setUint8(t,i)}},n.Int8={signed:!0,size:1,deserialize(e){return Rc(e,0)},serialize(e,t,i){e.setInt8(t,i)}},n.Uint16={signed:!1,size:2,deserialize(e,t){return Oc(e,0,t)},serialize(e,t,i,a){e.setUint16(t,i,a)}},n.Int16={signed:!0,size:2,deserialize(e,t){return Dc(e,0,t)},serialize(e,t,i,a){e.setInt16(t,i,a)}},n.Uint32={signed:!1,size:4,deserialize(e,t){return $c(e,0,t)},serialize(e,t,i,a){e.setUint32(t,i,a)}},n.Int32={signed:!0,size:4,deserialize(e,t){return Nc(e,0,t)},serialize(e,t,i,a){e.setInt32(t,i,a)}}})(Ke||(Ke={}));class Zc extends ws{constructor(t,i){super();k(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new el(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class el extends Mt{serialize(e,t,i){this.definition.variant.serialize(e,i,this.value,this.options.littleEndian)}}class Ga extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class tl extends Ga{constructor(){super("The underlying readable was ended before the struct was fully deserialized")}}class ms extends Ga{constructor(){super("The underlying readable doesn't contain any more struct")}}var vt,xe,Et,en,ye,gt,Ki,In;const Is=class Is{constructor(e){m(this,ye);k(this,"TFields");k(this,"TOmitInitKey");k(this,"TExtra");k(this,"TInit");k(this,"TDeserializeResult");k(this,"options");m(this,vt,0);m(this,xe,[]);m(this,Et,{});m(this,en);m(this,In,(e,t,i)=>"length"in i?this.field(e,new Yc(t,i)):this.field(e,new Gc(t,i)));k(this,"uint8Array",(e,t,i)=>u(this,In).call(this,e,Qi.Instance,t,i));k(this,"string",(e,t,i)=>u(this,In).call(this,e,Hi.Instance,t,i));this.options={...Tc,...e}}get size(){return u(this,vt)}get fields(){return u(this,xe)}field(e,t){for(const a of u(this,xe))if(a[0]===e){const l=String(e);throw new Error(`This struct already have a field with name '${l}'`)}u(this,xe).push([e,t]);const i=t.getSize();return b(this,vt,u(this,vt)+i),this}concat(e){if(!(e instanceof Is))throw new TypeError("The other value must be a `Struct` instance");for(const t of u(e,xe))u(this,xe).push(t);return b(this,vt,u(this,vt)+u(e,vt)),Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(u(e,Et))),this}int8(e,t){return C(this,ye,gt).call(this,e,Ke.Int8,t)}uint8(e,t){return C(this,ye,gt).call(this,e,Ke.Uint8,t)}int16(e,t){return C(this,ye,gt).call(this,e,Ke.Int16,t)}uint16(e,t){return C(this,ye,gt).call(this,e,Ke.Uint16,t)}int32(e,t){return C(this,ye,gt).call(this,e,Ke.Int32,t)}uint32(e,t){return C(this,ye,gt).call(this,e,Ke.Uint32,t)}int64(e,t){return C(this,ye,Ki).call(this,e,Qr.Int64,t)}uint64(e,t){return C(this,ye,Ki).call(this,e,Qr.Uint64,t)}extra(e){return Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(e)),this}postDeserialize(e){return b(this,en,e),this}deserialize(e){const t=new La(u(this,Et));let i=We.resolve();const a=e.position;for(const[l,d]of u(this,xe))i=i.then(()=>d.deserialize(this.options,e,t)).then(y=>{t.set(l,y)},y=>{throw y instanceof gs?e.position===a?new ms:new tl:y});return i.then(()=>{const l=t.value;if(u(this,en)){const d=u(this,en).call(l,l);if(d!==void 0)return d}return l}).valueOrPromise()}serialize(e,t){let i;if(Ic(e)){i=e[ys];for(const[v,h]of Object.entries(e)){const _=i.get(v);_&&_.set(h)}}else{i=new La({});for(const[v,h]of u(this,xe)){const _=h.create(this.options,i,e[v]);i.set(v,_)}}let a=0;const l=[];for(const[v]of u(this,xe)){const h=i.get(v),_=h.getSize();l.push({fieldValue:h,size:_}),a+=_}if(!t)t=new Uint8Array(a);else if(t.length<a)throw new TypeError("Output buffer is too small");const d=new DataView(t.buffer,t.byteOffset,t.byteLength);let y=0;for(const{fieldValue:v,size:h}of l)v.serialize(d,t,y),y+=h;return t.length!==a?t.subarray(0,a):t}};vt=new WeakMap,xe=new WeakMap,Et=new WeakMap,en=new WeakMap,ye=new WeakSet,gt=function(e,t,i){return this.field(e,new Zc(t,i))},Ki=function(e,t,i){return this.field(e,new Fc(t,i))},In=new WeakMap;let K=Is;var re=(function(){function n(){var e=this;this._state="running",this.resolve=function(t){e._resolve(t),e._state="resolved"},this.reject=function(t){e._reject(t),e._state="rejected"},this._promise=new Promise(function(t,i){e._resolve=t,e._reject=i})}return Object.defineProperty(n.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),n})(),nl=(function(){function n(e){e===void 0&&(e=0),this.pendingResolvers=new Map,this.nextId=e}return n.prototype.add=function(){var e=this.nextId++,t=new re;return this.pendingResolvers.set(e,t),[e,t.promise]},n.prototype.getResolver=function(e){if(!this.pendingResolvers.has(e))return null;var t=this.pendingResolvers.get(e);return this.pendingResolvers.delete(e),t},n.prototype.resolve=function(e,t){var i=this.getResolver(e);return i!==null?(i.resolve(t),!0):!1},n.prototype.reject=function(e,t){var i=this.getResolver(e);return i!==null?(i.reject(t),!0):!1},n})();function rl(n){return new Promise(function(e){globalThis.setTimeout(function(){return e()},n)})}const gi=globalThis,xr=gi.AbortController,Ut=gi.ReadableStream,Ce=gi.WritableStream,bs=gi.TransformStream;var tn;class wn extends Ut{constructor(t,i){let a;const l=new xr;super({start:async d=>{await Promise.resolve();const y=t({abortSignal:l.signal,enqueue:async v=>{if(l.signal.aborted)throw l.signal.reason;if(d.desiredSize===null){d.enqueue(v);return}if(u(this,tn)){b(this,tn,!1),d.enqueue(v);return}d.desiredSize<=0&&(a=new re,await a.promise),d.enqueue(v)},close(){d.close()},error(v){d.error(v)}});y&&"then"in y&&y.then(()=>{try{d.close()}catch{}},v=>{d.error(v)})},pull:()=>{if(a){a.resolve();return}(i==null?void 0:i.highWaterMark)===0&&b(this,tn,!0)},cancel:d=>{l.abort(d),a==null||a.reject(d)}},i);m(this,tn,!1)}}tn=new WeakMap;const il=()=>{};var Re,Oe,$e,pe,at,Yi,Gi;class kr{constructor(e){m(this,at);m(this,Re);m(this,Oe,0);m(this,$e,0);m(this,pe,0);k(this,"stream");k(this,"reader");this.stream=e,this.reader=e.getReader()}get position(){return u(this,pe)}readExactly(e){if(u(this,Re)){const t=u(this,Re),i=u(this,Oe);return u(this,$e)>e?(b(this,Oe,u(this,Oe)+e),b(this,$e,u(this,$e)-e),b(this,pe,u(this,pe)+e),t.subarray(i,i+e)):(b(this,Re,void 0),b(this,$e,0),b(this,Oe,0),b(this,pe,u(this,pe)+(t.length-i)),C(this,at,Gi).call(this,e,t.subarray(i)))}return C(this,at,Gi).call(this,e)}release(){return u(this,$e)>0?new wn(async e=>{const t=u(this,Re).subarray(u(this,Oe));for(await e.enqueue(t),e.abortSignal.addEventListener("abort",()=>{this.reader.cancel().catch(il)});;){const{done:i,value:a}=await this.reader.read();if(i)return;await e.enqueue(a)}}):(this.reader.releaseLock(),this.stream)}async cancel(e){await this.reader.cancel(e)}}Re=new WeakMap,Oe=new WeakMap,$e=new WeakMap,pe=new WeakMap,at=new WeakSet,Yi=async function(){const{done:e,value:t}=await this.reader.read();if(e)throw new gs;return t},Gi=async function(e,t){let i,a;if(t)i=new Uint8Array(e),i.set(t),a=t.length,e-=t.length;else{const l=await C(this,at,Yi).call(this);if(l.length===e)return b(this,pe,u(this,pe)+e),l;if(l.length>e)return b(this,Re,l),b(this,Oe,e),b(this,$e,l.length-e),b(this,pe,u(this,pe)+e),l.subarray(0,e);i=new Uint8Array(e),i.set(l),a=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}for(;e>0;){const l=await C(this,at,Yi).call(this);if(l.length===e)return i.set(l,a),b(this,pe,u(this,pe)+e),i;if(l.length>e)return b(this,Re,l),b(this,Oe,e),b(this,$e,l.length-e),i.set(l.subarray(0,e),a),b(this,pe,u(this,pe)+e),i;i.set(l,a),a+=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}return i};var Dn,Nn;class sl{constructor(e){m(this,Dn);m(this,Nn);let t;const i=new kr(new wn(a=>{t=a}));b(this,Dn,new Ut({async pull(a){try{const l=await e(i);a.enqueue(l)}catch(l){if(l instanceof ms){a.close();return}throw l}},cancel:a=>i.cancel(a)})),b(this,Nn,new Ce({async write(a){await t.enqueue(a)},abort(){t.close()},close(){t.close()}}))}get readable(){return u(this,Dn)}get writable(){return u(this,Nn)}}Dn=new WeakMap,Nn=new WeakMap;var nn,ke,ai,St,Pn;class Ji{constructor(){m(this,nn,"");m(this,ke,new re);m(this,ai,new Ce({write:e=>{b(this,nn,u(this,nn)+e)},close:()=>{u(this,ke).resolve(u(this,nn)),u(this,St).enqueue(u(this,nn)),u(this,St).close()},abort:e=>{u(this,ke).reject(e),u(this,St).error(e)}}));m(this,St);m(this,Pn,new Ut({start:e=>{b(this,St,e)}}));Object.defineProperties(u(this,Pn),{then:{get:()=>u(this,ke).promise.then.bind(u(this,ke).promise)},catch:{get:()=>u(this,ke).promise.catch.bind(u(this,ke).promise)},finally:{get:()=>u(this,ke).promise.finally.bind(u(this,ke).promise)}})}get writable(){return u(this,ai)}get readable(){return u(this,Pn)}}nn=new WeakMap,ke=new WeakMap,ai=new WeakMap,St=new WeakMap,Pn=new WeakMap;const{console:Vr}=globalThis;var ja;const al=((ja=Vr==null?void 0:Vr.createTask)==null?void 0:ja.bind(Vr))??(()=>({run(n){return n()}}));function ol(n){return typeof n=="object"&&n!==null&&"then"in n}var qn,Le;class be{constructor(e){m(this,qn);m(this,Le);k(this,"value");k(this,"consumed");b(this,qn,al("Consumable")),this.value=e,b(this,Le,new re),this.consumed=u(this,Le).promise}consume(){u(this,Le).resolve()}error(e){u(this,Le).reject(e)}tryConsume(e){try{let t=u(this,qn).run(()=>e(this.value));return ol(t)?t=t.then(i=>(u(this,Le).resolve(),i),i=>{throw u(this,Le).reject(i),i}):u(this,Le).resolve(),t}catch(t){throw u(this,Le).reject(t),t}}}qn=new WeakMap,Le=new WeakMap;(function(n){class e extends Ce{static async write(a,l){const d=new n(l);await a.write(d),await d.consumed}constructor(a,l){let d;l&&(d={},"highWaterMark"in l&&(d.highWaterMark=l.highWaterMark),"size"in l&&(d.size=y=>l.size(y instanceof n?y.value:y))),super({start(y){var v;return(v=a.start)==null?void 0:v.call(a,y)},async write(y,v){await y.tryConsume(h=>{var _;return(_=a.write)==null?void 0:_.call(a,h,v)})},abort(y){var v;return(v=a.abort)==null?void 0:v.call(a,y)},close(){var y;return(y=a.close)==null?void 0:y.call(a)}},d)}}n.WritableStream=e;class t extends Ut{static async enqueue(a,l){const d=new n(l);a.enqueue(d),await d.consumed}constructor(a,l){let d,y;l&&(y={},"highWaterMark"in l&&(y.highWaterMark=l.highWaterMark),"size"in l&&(y.size=v=>l.size(v.value))),super({async start(v){var h;d={async enqueue(_){await t.enqueue(v,_)},close(){v.close()},error(_){v.error(_)}},await((h=a.start)==null?void 0:h.call(a,d))},async pull(){var v;await((v=a.pull)==null?void 0:v.call(a,d))},async cancel(v){var h;await((h=a.cancel)==null?void 0:h.call(a,v))}},y)}}n.ReadableStream=t})(be||(be={}));var st;(function(n){function e(l){return l instanceof be?l.value:l}n.getValue=e;function t(l,d){return l instanceof be?l.tryConsume(d):d(l)}n.tryConsume=t;class i extends bs{constructor(){super({transform(d,y){n.tryConsume(d,v=>{y.enqueue(v)})}})}}n.UnwrapStream=i;class a extends Ce{constructor(d,y){let v;y&&(v={},"highWaterMark"in y&&(v.highWaterMark=y.highWaterMark),"size"in y&&(v.size=h=>y.size(h instanceof be?h.value:h))),super({start(h){var _;return(_=d.start)==null?void 0:_.call(d,h)},async write(h,_){await n.tryConsume(h,B=>{var W;return(W=d.write)==null?void 0:W.call(d,B,_)})},abort(h){var _;return(_=d.abort)==null?void 0:_.call(d,h)},close(){var h;return(h=d.close)==null?void 0:h.call(d)}},v)}}n.WritableStream=a})(st||(st={}));var Ae,Me,se,we;class Ja{constructor(e){m(this,Ae);m(this,Me);m(this,se);m(this,we);b(this,Ae,e),b(this,Me,new Uint8Array(e)),b(this,se,0),b(this,we,e)}*push(e){let t=0,i=e.length;if(u(this,se)!==0)if(i>=u(this,we)){if(u(this,Me).set(e.subarray(0,u(this,we)),u(this,se)),t+=u(this,we),i-=u(this,we),yield u(this,Me),b(this,se,0),b(this,we,u(this,Ae)),i===0)return}else{u(this,Me).set(e,u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i);return}for(;i>=u(this,Ae);){const a=t+u(this,Ae);yield e.subarray(t,a),t=a,i-=u(this,Ae)}i>0&&(u(this,Me).set(e.subarray(t),u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i))}flush(){if(u(this,se)===0)return;const e=u(this,Me).subarray(0,u(this,se));return b(this,se,0),b(this,we,u(this,Ae)),e}}Ae=new WeakMap,Me=new WeakMap,se=new WeakMap,we=new WeakMap;class cl extends bs{constructor(e,t=!1){const i=t?new Ja(e):void 0;super({async transform(a,l){await st.tryConsume(a,async d=>{if(i)for(const y of i.push(d))await be.ReadableStream.enqueue(l,y);else{let y=0,v=d.length;for(;v>0;){const h=y+e;await be.ReadableStream.enqueue(l,d.subarray(y,h)),y=h,v-=e}}})},flush(a){if(i){const l=i.flush();l&&a.enqueue(l)}}})}}function ll(n,e){return"start"in n?n.start(e):typeof n=="function"?n(e):n}var rn;class ul extends Ut{constructor(t,i){super({start:async a=>{await Promise.resolve(),this.readable=await ll(t,a),b(this,rn,this.readable.getReader())},pull:async a=>{var d;const l=await u(this,rn).read();l.done?(a.close(),"close"in t&&await((d=t.close)==null?void 0:d.call(t))):a.enqueue(l.value)},cancel:async a=>{var l;await u(this,rn).cancel(a),"cancel"in t&&await((l=t.cancel)==null?void 0:l.call(t,a))}},i);k(this,"readable");m(this,rn)}}rn=new WeakMap;const Ia=()=>{};var Cn,Bn,xt,Rn,sn;class hl{constructor(e){m(this,Cn,[]);m(this,Bn,[]);m(this,xt,!1);m(this,Rn,new re);m(this,sn);b(this,sn,e??{})}get writableClosed(){return u(this,xt)}get closed(){return u(this,Rn).promise}wrapReadable(e,t){return new ul({start:i=>(u(this,Cn).push(i),e),cancel:async()=>{await this.close()},close:async()=>{await this.dispose()}},t)}createWritable(e){const t=e.getWriter();return u(this,Bn).push(t),new Ce({write:async i=>{await t.write(i)},abort:async i=>{await t.abort(i),await this.close()},close:async()=>{await t.close().catch(Ia),await this.close()}})}async close(){var e,t;if(!u(this,xt)){b(this,xt,!0),await((t=(e=u(this,sn)).close)==null?void 0:t.call(e))!==!1&&await this.dispose();for(const i of u(this,Bn))i.close().catch(Ia)}}async dispose(){var e,t;b(this,xt,!0),u(this,Rn).resolve();for(const i of u(this,Cn))try{i.close()}catch{}await((t=(e=u(this,sn)).dispose)==null?void 0:t.call(e))}}Cn=new WeakMap,Bn=new WeakMap,xt=new WeakMap,Rn=new WeakMap,sn=new WeakMap;const dl=globalThis,Xi=dl.TextDecoderStream;function fl(n,e){const t=e.writable.getWriter(),i=e.readable.pipeTo(n);return new Ce({async write(a){await t.write(a)},async close(){await t.close(),await i}})}class pl extends sl{constructor(e){super(t=>e.deserialize(t))}}async function wl(n){return"start"in n?await n.start():typeof n=="function"?await n():n}var kt;const Ds=class Ds extends Ce{constructor(t){super({start:async()=>{await Promise.resolve(),this.writable=await wl(t),b(this,kt,this.writable.getWriter())},write:async i=>{await u(this,kt).write(i)},abort:async i=>{var a;await u(this,kt).abort(i),t!==this.writable&&"close"in t&&await((a=t.close)==null?void 0:a.call(t))},close:async()=>{var i;await u(this,kt).close(),t!==this.writable&&"close"in t&&await((i=t.close)==null?void 0:i.call(t))}});k(this,"writable");m(this,kt)}bePipedThroughFrom(t){let i;return new Ds({start:()=>(i=t.readable.pipeTo(this),t.writable),async close(){await i}})}};kt=new WeakMap;let Zi=Ds;var an;class vs{constructor(){m(this,an,[]);this.dispose=this.dispose.bind(this)}addDisposable(e){return u(this,an).push(e),e}dispose(){for(const e of u(this,an))e.dispose();b(this,an,[])}}an=new WeakMap;class Es extends vs{constructor(t){super();k(this,"adb");this.adb=t}}const gl=new K({littleEndian:!0}).uint32("version"),yl=new K({littleEndian:!0}).uint32("bpp").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"}),ml=new K({littleEndian:!0}).uint32("bpp").uint32("colorSpace").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"});class Xa extends Error{constructor(e,t){super(e,t)}}class bl extends Xa{constructor(e){super(`Unsupported FrameBuffer version ${e}`)}}class vl extends Xa{constructor(){super("FrameBuffer is disabled by current app")}}async function El(n){const e=await n.createSocket("framebuffer:"),t=new kr(e.readable);let i;try{({version:i}=await gl.deserialize(t))}catch(a){throw a instanceof ms?new vl:a}switch(i){case 1:return yl.deserialize(t);case 2:return ml.deserialize(t);default:throw new bl(i)}}class Sl extends Es{reboot(e=""){return this.adb.createSocketAndWait(`reboot:${e}`)}bootloader(){return this.reboot("bootloader")}fastboot(){return this.reboot("fastboot")}recovery(){return this.reboot("recovery")}sideload(){return this.reboot("sideload")}qualcommEdlMode(){return this.reboot("edl")}powerOff(){return this.adb.subprocess.spawnAndWaitLegacy(["reboot","-p"])}powerButton(e=!1){const t=["input","keyevent"];return e&&t.push("--longpress"),t.push("POWER"),this.adb.subprocess.spawnAndWaitLegacy(t)}samsungOdin(){return this.reboot("download")}}var Lt,ze;class Za{constructor(e=!1){m(this,Lt);m(this,ze,[]);b(this,Lt,e)}wait(){if(!u(this,Lt)&&(b(this,Lt,!0),u(this,ze).length===0))return Promise.resolve();const e=new re;return u(this,ze).push(e),e.promise}notifyOne(){u(this,ze).length!==0?u(this,ze).pop().resolve():b(this,Lt,!1)}dispose(){for(const e of u(this,ze))e.reject(new Error("The AutoResetEvent has been disposed"));u(this,ze).length=0}}Lt=new WeakMap,ze=new WeakMap;const H=[],Gt=61;function Lr(n,e){const t=n.charCodeAt(0),i=e.charCodeAt(0);for(let a=t;a<=i;a+=1)H.push(a)}Lr("A","Z");Lr("a","z");Lr("0","9");Lr("+","+");Lr("/","/");function eo(n){const e=n%3,t=e!==0?3-e:0;return[(n+t)/3*4,t]}function xl(n,e){const[t,i]=eo(n.length);if(e){if(e.length<t)throw new TypeError("output buffer is too small");if(e=e.subarray(0,t),n.buffer!==e.buffer)zi(n,e,i);else if(e.byteOffset+e.length-(i+1)<=n.byteOffset+n.length)zi(n,e,i);else if(e.byteOffset>=n.byteOffset-1)kl(n,e,i);else throw new TypeError("input and output cannot overlap");return t}else return e=new Uint8Array(t),zi(n,e,i),e}function zi(n,e,t){let i=0,a=0;for(;i<n.length-2;){const l=n[i];i+=1;const d=n[i];i+=1;const y=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2|y>>6],a+=1,e[a]=H[y&63],a+=1}if(t===2){const l=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4],a+=1,e[a]=Gt,a+=1,e[a]=Gt}else if(t===1){const l=n[i];i+=1;const d=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2],a+=1,e[a]=Gt}}function kl(n,e,t){let i=n.length-1,a=e.length-1;if(t===2){const l=n[i];i-=1,e[a]=Gt,a-=1,e[a]=Gt,a-=1,e[a]=H[(l&3)<<4],a-=1,e[a]=H[l>>2],a-=1}else if(t===1){const l=n[i];i-=1;const d=n[i];i-=1,e[a]=Gt,a-=1,e[a]=H[(l&15)<<2],a-=1,e[a]=H[(d&3)<<4|l>>4],a-=1,e[a]=H[d>>2],a-=1}for(;i>=0;){const l=n[i];i-=1;const d=n[i];i-=1;const y=n[i];i-=1,e[a]=H[l&63],a-=1,e[a]=H[(d&15)<<2|l>>6],a-=1,e[a]=H[(y&3)<<4|d>>4],a-=1,e[a]=H[y>>2],a-=1}}function Ll(n){if(n<48)throw new TypeError(`Invalid hex char ${n}`);if(n<58)return n-48;if(n<65)throw new TypeError(`Invalid hex char ${n}`);if(n<71)return n-55;if(n<97)throw new TypeError(`Invalid hex char ${n}`);if(n<103)return n-87;throw new TypeError(`Invalid hex char ${n}`)}function Tn(n){let e=0;for(let t=0;t<n.length;t+=1)e=e<<4|Ll(n[t]);return e}function _l(n,e,t){const i=e;for(e+=3;e>=i&&t>0;){const a=t&15;t>>=4,a<10?n[e]=a+48:n[e]=a+87,e-=1}for(;e>=i;)n[e]=48,e-=1}const es=()=>{};function to(...n){throw new Error(`Unreachable. Arguments:
|
|
2
|
-
`+n.join(`
|
|
3
|
-
`))}function Hr(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=1)if(n[t]!==e[t])return!1;return!0}const no=new K().string("length",{length:4}).string("content",{lengthField:"length",lengthFieldRadix:16});class ro extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class Tl extends ro{constructor(){super("ADB reverse tunnel is not supported on this device when connected wirelessly.")}}const Il=new K().concat(no).postDeserialize(n=>{throw n.content==="more than one device/emulator"?new Tl:new ro(n.content)});function Dl(n){let e=0;for(const t of n){if(t<48||t>57)return e;e=e*10+t-48}return e}const Nl=qe("OKAY");var on;class Pl extends vs{constructor(t){super();k(this,"adb");m(this,on,new Map);this.adb=t}async createBufferedStream(t){const i=await this.adb.createSocket(t);return new kr(i.readable)}async sendRequest(t){const i=await this.createBufferedStream(t),a=await i.readExactly(4);return Hr(a,Nl)||await Il.deserialize(i),i}async list(){const t=await this.createBufferedStream("reverse:list-forward");return(await no.deserialize(t)).content.split(`
|
|
4
|
-
`).filter(a=>!!a).map(a=>{const[l,d,y]=a.split(" ");return{deviceSerial:l,localName:d,remoteName:y}})}async addExternal(t,i){const a=await this.sendRequest(`reverse:forward:${t};${i}`);if(t.startsWith("tcp:")){const l=a.position;try{const d=Tn(await a.readExactly(4));t=`tcp:${Dl(await a.readExactly(d))}`}catch(d){if(!(d instanceof gs&&a.position===l))throw d}}return t}async add(t,i,a){a=await this.adb.transport.addReverseTunnel(i,a);try{return t=await this.addExternal(t,a),u(this,on).set(t,a),t}catch(l){throw await this.adb.transport.removeReverseTunnel(a),l}}async remove(t){const i=u(this,on).get(t);i&&await this.adb.transport.removeReverseTunnel(i),await this.sendRequest(`reverse:killforward:${t}`)}async removeAll(){await this.adb.transport.clearReverseTunnels(),u(this,on).clear(),await this.sendRequest("reverse:killforward-all")}}on=new WeakMap;var Ge,On,$n;const oi=class oi{constructor(e){m(this,Ge);m(this,On);m(this,$n);b(this,Ge,e),b(this,On,new Ut({start:t=>{u(this,Ge).closed.then(()=>t.close()).catch(to)}})),b(this,$n,e.closed.then(()=>0))}static isSupported(){return!0}static async pty(e,t){return new oi(await e.createSocket(`shell:${t}`))}static async raw(e,t){return new oi(await e.createSocket(`exec:${t}`))}get stdin(){return u(this,Ge).writable}get stdout(){return u(this,Ge).readable}get stderr(){return u(this,On)}get exit(){return u(this,$n)}resize(){}async kill(){await u(this,Ge).close()}};Ge=new WeakMap,On=new WeakMap,$n=new WeakMap;let Kr=oi;var O;(function(n){n.ShellV2="shell_v2",n.Cmd="cmd",n.StatV2="stat_v2",n.ListV2="ls_v2",n.FixedPushMkdir="fixed_push_mkdir",n.Abb="abb",n.AbbExec="abb_exec",n.SendReceiveV2="sendrecv_v2",n.DelayedAck="delayed_ack"})(O||(O={}));var yt;(function(n){n[n.Stdin=0]="Stdin",n[n.Stdout=1]="Stdout",n[n.Stderr=2]="Stderr",n[n.Exit=3]="Exit",n[n.CloseStdin=4]="CloseStdin",n[n.WindowSizeChange=5]="WindowSizeChange"})(yt||(yt={}));const Ui=new K({littleEndian:!0}).uint8("id",void 0).uint32("length").uint8Array("data",{lengthField:"length"});var cn,ln,An,Mn,zn,_t;const ci=class ci{constructor(e){m(this,cn);m(this,ln);m(this,An);m(this,Mn);m(this,zn);m(this,_t,new re);b(this,cn,e);let t,i;b(this,Mn,new wn(a=>{t=a})),b(this,zn,new wn(a=>{i=a})),e.readable.pipeThrough(new pl(Ui)).pipeTo(new Ce({write:async a=>{switch(a.id){case yt.Exit:u(this,_t).resolve(a.data[0]);break;case yt.Stdout:t.abortSignal.aborted||await t.enqueue(a.data);break;case yt.Stderr:i.abortSignal.aborted||await i.enqueue(a.data);break}}})).then(()=>{t.close(),i.close(),u(this,_t).reject(new Error("Socket ended without exit message"))},a=>{t.error(a),i.error(a),u(this,_t).reject(a)}),b(this,ln,u(this,cn).writable.getWriter()),b(this,An,new st.WritableStream({write:async a=>{await u(this,ln).write(Ui.serialize({id:yt.Stdin,data:a}))}}))}static isSupported(e){return e.canUseFeature(O.ShellV2)}static async pty(e,t){return new ci(await e.createSocket(`shell,v2,pty:${t}`))}static async raw(e,t){return new ci(await e.createSocket(`shell,v2,raw:${t}`))}get stdin(){return u(this,An)}get stdout(){return u(this,Mn)}get stderr(){return u(this,zn)}get exit(){return u(this,_t).promise}async resize(e,t){await u(this,ln).write(Ui.serialize({id:yt.WindowSizeChange,data:qe(`${e}x${t},0x0\0`)}))}kill(){return u(this,cn).close()}};cn=new WeakMap,ln=new WeakMap,An=new WeakMap,Mn=new WeakMap,zn=new WeakMap,_t=new WeakMap;let ts=ci;const ql={protocols:[ts,Kr]};var Un,ns;class Cl extends Es{constructor(){super(...arguments);m(this,Un)}shell(t,i){return C(this,Un,ns).call(this,"pty",t,i)}spawn(t,i){return C(this,Un,ns).call(this,"raw",t,i)}async spawnAndWait(t,i){const a=await this.spawn(t,i),[l,d,y]=await Promise.all([a.stdout.pipeThrough(new Xi).pipeThrough(new Ji),a.stderr.pipeThrough(new Xi).pipeThrough(new Ji),a.exit]);return{stdout:l,stderr:d,exitCode:y}}async spawnAndWaitLegacy(t){const{stdout:i}=await this.spawnAndWait(t,{protocols:[Kr]});return i}}Un=new WeakSet,ns=async function(t,i,a){const{protocols:l}={...ql,...a};let d;for(const y of l)if(await y.isSupported(this.adb)){d=y;break}if(!d)throw new Error("No specified protocol is supported by the device");return Array.isArray(i)?i=i.join(" "):i===void 0&&(i=""),await d[t](this.adb,i)};function rs(n){let e="";e+="'";let t=0;for(;;){const i=n.indexOf("'",t);if(i===-1){e+=n.substring(t);break}e+=n.substring(t,i),e+=String.raw`'\''`,t=i+1}return e+="'",e}function Bl(n){const e=new Uint8Array(n.length);for(let t=0;t<n.length;t+=1)e[t]=n.charCodeAt(t);return e}function V(n){const e=Bl(n);return wi(e,0)}var ae;(function(n){n.Entry=V("DENT"),n.Entry2=V("DNT2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.Lstat2=V("LST2"),n.Done=V("DONE"),n.Data=V("DATA"),n.Ok=V("OKAY"),n.Fail=V("FAIL")})(ae||(ae={}));class Rl extends Error{}const io=new K({littleEndian:!0}).uint32("messageLength").string("message",{lengthField:"messageLength"}).postDeserialize(n=>{throw new Rl(n.message)});async function Yr(n,e,t){typeof e=="string"&&(e=V(e));const i=await n.readExactly(4);switch(wi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case e:return await t.deserialize(n);default:throw new Error(`Expected '${e}', but got '${zt(i)}'`)}}async function*Gr(n,e,t){for(typeof e=="string"&&(e=V(e));;){const i=await n.readExactly(4);switch(wi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case ae.Done:await n.readExactly(t.size);return;case e:yield await t.deserialize(n);break;default:throw new Error(`Expected '${e}' or '${ae.Done}', but got '${zt(i)}'`)}}}var he;(function(n){n.List=V("LIST"),n.ListV2=V("LIS2"),n.Send=V("SEND"),n.SendV2=V("SND2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.LstatV2=V("LST2"),n.Data=V("DATA"),n.Done=V("DONE"),n.Receive=V("RECV")})(he||(he={}));const Da=new K({littleEndian:!0}).uint32("id").uint32("arg");async function Pe(n,e,t){if(typeof e=="string"&&(e=V(e)),typeof t=="number"){await n.write(Da.serialize({id:e,arg:t}));return}typeof t=="string"&&(t=qe(t)),await n.write(Da.serialize({id:e,arg:t.length})),await n.write(t)}var Jr;(function(n){n[n.Directory=4]="Directory",n[n.File=8]="File",n[n.Link=10]="Link"})(Jr||(Jr={}));const so=new K({littleEndian:!0}).int32("mode").int32("size").int32("mtime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.mode===0&&n.size===0&&n.mtime===0)throw new Error("lstat error")});var Xr;(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.EACCES=13]="EACCES",n[n.EEXIST=17]="EEXIST",n[n.EFAULT=14]="EFAULT",n[n.EFBIG=27]="EFBIG",n[n.EINTR=4]="EINTR",n[n.EINVAL=22]="EINVAL",n[n.EIO=5]="EIO",n[n.EISDIR=21]="EISDIR",n[n.ELOOP=40]="ELOOP",n[n.EMFILE=24]="EMFILE",n[n.ENAMETOOLONG=36]="ENAMETOOLONG",n[n.ENFILE=23]="ENFILE",n[n.ENOENT=2]="ENOENT",n[n.ENOMEM=12]="ENOMEM",n[n.ENOSPC=28]="ENOSPC",n[n.ENOTDIR=20]="ENOTDIR",n[n.EOVERFLOW=75]="EOVERFLOW",n[n.EPERM=1]="EPERM",n[n.EROFS=30]="EROFS",n[n.ETXTBSY=26]="ETXTBSY"})(Xr||(Xr={}));const Ss=new K({littleEndian:!0}).uint32("error",void 0).uint64("dev").uint64("ino").uint32("mode").uint32("nlink").uint32("uid").uint32("gid").uint64("size").uint64("atime").uint64("mtime").uint64("ctime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.error)throw new Error(Xr[n.error])});async function Ol(n,e,t){const i=await n.lock();try{if(t)return await Pe(i,he.LstatV2,e),await Yr(i,ae.Lstat2,Ss);{await Pe(i,he.Lstat,e);const a=await Yr(i,ae.Lstat,so);return{mode:a.mode,size:BigInt(a.size),mtime:BigInt(a.mtime),get type(){return a.type},get permission(){return a.permission}}}}finally{i.release()}}async function $l(n,e){const t=await n.lock();try{return await Pe(t,he.Stat,e),await Yr(t,ae.Stat,Ss)}finally{t.release()}}const Al=new K({littleEndian:!0}).concat(so).uint32("nameLength").string("name",{lengthField:"nameLength"}),Ml=new K({littleEndian:!0}).concat(Ss).uint32("nameLength").string("name",{lengthField:"nameLength"});async function*zl(n,e){const t=await n.lock();try{await Pe(t,he.ListV2,e);for await(const i of Gr(t,ae.Entry2,Ml))i.error===Xr.SUCCESS&&(yield i)}finally{t.release()}}async function*Ul(n,e){const t=await n.lock();try{await Pe(t,he.List,e);for await(const i of Gr(t,ae.Entry,Al))yield i}finally{t.release()}}async function*Wl(n,e,t){if(t)yield*zl(n,e);else for await(const i of Ul(n,e))yield{mode:i.mode,size:BigInt(i.size),mtime:BigInt(i.mtime),get type(){return i.type},get permission(){return i.permission},name:i.name}}const Na=new K({littleEndian:!0}).uint32("dataLength").uint8Array("data",{lengthField:"dataLength"});async function*Fl(n,e){const t=await n.lock();let i=!1;try{await Pe(t,he.Receive,e);for await(const a of Gr(t,ae.Data,Na))yield a.data;i=!0}catch(a){throw i=!0,a}finally{if(!i)for await(const a of Gr(t,ae.Data,Na));t.release()}}function Vl(n,e){return new wn(async t=>{for await(const i of Fl(n,e))await t.enqueue(i)})}const ao=64*1024,jl=new K({littleEndian:!0}).uint32("unused");async function oo(n,e,t,i){const a=new xr;e.pipeThrough(new cl(t,!0)).pipeTo(new st.WritableStream({write:async l=>{await Pe(n,he.Data,l)}}),{signal:a.signal}).then(async()=>{await Pe(n,he.Done,i),await n.flush()},es),await Yr(n,ae.Ok,jl).catch(l=>{throw a.abort(),l})}async function Ql({socket:n,filename:e,file:t,type:i=Jr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao}){const y=await n.lock();try{const v=i<<12|a,h=`${e},${v.toString()}`;await Pe(y,he.Send,h),await oo(y,t,d,l)}finally{y.release()}}var Zr;(function(n){n[n.None=0]="None",n[n.Brotli=1]="Brotli",n[n.Lz4=2]="Lz4",n[n.Zstd=4]="Zstd",n[n.DryRun=2147483648]="DryRun"})(Zr||(Zr={}));const Hl=new K({littleEndian:!0}).uint32("id").uint32("mode").uint32("flags",void 0);async function Kl({socket:n,filename:e,file:t,type:i=Jr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao,dryRun:y=!1}){const v=await n.lock();try{await Pe(v,he.SendV2,e);const h=i<<12|a;let _=Zr.None;y&&(_|=Zr.DryRun),await v.write(Hl.serialize({id:he.SendV2,mode:h,flags:_})),await oo(v,t,d,l)}finally{v.release()}}function Yl(n){if(n.v2)return Kl(n);if(n.dryRun)throw new Error("dryRun is not supported in v1");return Ql(n)}var Wn,Tt,Fn,It,Dt,Vn,is;class Gl{constructor(e,t,i,a){m(this,Vn);m(this,Wn);m(this,Tt);m(this,Fn);m(this,It,new Za);m(this,Dt);b(this,Wn,e),b(this,Tt,t),b(this,Fn,a),b(this,Dt,new Ja(i))}get position(){return u(this,Tt).position}async flush(){try{await u(this,It).wait();const e=u(this,Dt).flush();e&&await C(this,Vn,is).call(this,e)}finally{u(this,It).notifyOne()}}async write(e){try{await u(this,It).wait();for(const t of u(this,Dt).push(e))await C(this,Vn,is).call(this,t)}finally{u(this,It).notifyOne()}}async readExactly(e){return await this.flush(),await u(this,Tt).readExactly(e)}release(){u(this,Dt).flush(),u(this,Fn).notifyOne()}async close(){await u(this,Tt).cancel()}}Wn=new WeakMap,Tt=new WeakMap,Fn=new WeakMap,It=new WeakMap,Dt=new WeakMap,Vn=new WeakSet,is=async function(e){await be.WritableStream.write(u(this,Wn),e)};var jn,Qn,un;class Jl{constructor(e,t){m(this,jn,new Za);m(this,Qn);m(this,un);b(this,Qn,e),b(this,un,new Gl(e.writable.getWriter(),new kr(e.readable),t,u(this,jn)))}async lock(){return await u(this,jn).wait(),u(this,un)}async close(){await u(this,un).close(),await u(this,Qn).close()}}jn=new WeakMap,Qn=new WeakMap,un=new WeakMap;function Xl(n){const e=n.lastIndexOf("/");if(e===-1)throw new Error("Invalid path");return e===0?"/":n.substring(0,e)}var Nt,Hn,Kn,Yn,Gn;class Zl extends vs{constructor(t,i){super();k(this,"_adb");k(this,"_socket");m(this,Nt);m(this,Hn);m(this,Kn);m(this,Yn);m(this,Gn);this._adb=t,this._socket=new Jl(i,t.maxPayloadSize),b(this,Nt,t.canUseFeature(O.StatV2)),b(this,Hn,t.canUseFeature(O.ListV2)),b(this,Kn,t.canUseFeature(O.FixedPushMkdir)),b(this,Yn,t.canUseFeature(O.SendReceiveV2)),b(this,Gn,this._adb.canUseFeature(O.ShellV2)&&!this.fixedPushMkdir)}get supportsStat(){return u(this,Nt)}get supportsListV2(){return u(this,Hn)}get fixedPushMkdir(){return u(this,Kn)}get supportsSendReceiveV2(){return u(this,Yn)}get needPushMkdirWorkaround(){return u(this,Gn)}async lstat(t){return await Ol(this._socket,t,u(this,Nt))}async stat(t){if(!u(this,Nt))throw new Error("Not supported");return await $l(this._socket,t)}async isDirectory(t){try{return await this.lstat(t+"/"),!0}catch{return!1}}opendir(t){return Wl(this._socket,t,this.supportsListV2)}async readdir(t){const i=[];for await(const a of this.opendir(t))i.push(a);return i}read(t){return Vl(this._socket,t)}async write(t){this.needPushMkdirWorkaround&&await this._adb.subprocess.spawnAndWait(["mkdir","-p",rs(Xl(t.filename))]),await Yl({v2:this.supportsSendReceiveV2,socket:this._socket,...t})}lockSocket(){return this._socket.lock()}async dispose(){super.dispose(),await this._socket.close()}}Nt=new WeakMap,Hn=new WeakMap,Kn=new WeakMap,Yn=new WeakMap,Gn=new WeakMap;var Jn,ss;class eu extends Es{constructor(){super(...arguments);m(this,Jn)}async getListenAddresses(){const t=await this.adb.getProp("service.adb.listen_addrs"),i=await this.adb.getProp("service.adb.tcp.port"),a=await this.adb.getProp("persist.adb.tcp.port");return{serviceListenAddresses:t!=""?t.split(","):[],servicePort:C(this,Jn,ss).call(this,i),persistPort:C(this,Jn,ss).call(this,a)}}async setPort(t){if(t<=0)throw new TypeError(`Invalid port ${t}`);const i=await this.adb.createSocketAndWait(`tcpip:${t}`);if(i!==`restarting in TCP mode port: ${t}
|
|
5
|
-
`)throw new Error(i);return i}async disable(){const t=await this.adb.createSocketAndWait("usb:");if(t!==`restarting in USB mode
|
|
6
|
-
`)throw new Error(t);return t}}Jn=new WeakSet,ss=function(t){if(!(!t||t==="0"))return Number.parseInt(t,10)};class tu{constructor(e){k(this,"transport");k(this,"subprocess");k(this,"power");k(this,"reverse");k(this,"tcpip");this.transport=e,this.subprocess=new Cl(this),this.power=new Sl(this),this.reverse=new Pl(this),this.tcpip=new eu(this)}get serial(){return this.transport.serial}get maxPayloadSize(){return this.transport.maxPayloadSize}get banner(){return this.transport.banner}get disconnected(){return this.transport.disconnected}get clientFeatures(){return this.transport.clientFeatures}get deviceFeatures(){return this.banner.features}canUseFeature(e){return this.clientFeatures.includes(e)&&this.deviceFeatures.includes(e)}async createSocket(e){return this.transport.connect(e)}async createSocketAndWait(e){return await(await this.createSocket(e)).readable.pipeThrough(new Xi).pipeThrough(new Ji)}async getProp(e){return(await this.subprocess.spawnAndWaitLegacy(["getprop",e])).trim()}async rm(e,t){const i=["rm"];if(t!=null&&t.recursive&&i.push("-r"),t!=null&&t.force&&i.push("-f"),Array.isArray(e))for(const l of e)i.push(rs(l));else i.push(rs(e));return i.push("</dev/null"),await this.subprocess.spawnAndWaitLegacy(i)}async sync(){const e=await this.createSocket("sync:");return new Zl(this,e)}async framebuffer(){return El(this)}async close(){await this.transport.close()}}var Kt;(function(n){n.Product="ro.product.name",n.Model="ro.product.model",n.Device="ro.product.device",n.Features="features"})(Kt||(Kt={}));var Xn,Zn,er,tr;const Ns=class Ns{constructor(e,t,i,a){m(this,Xn);m(this,Zn);m(this,er);m(this,tr,[]);b(this,Xn,e),b(this,Zn,t),b(this,er,i),b(this,tr,a)}static parse(e){let t,i,a,l=[];const d=e.split("::");if(d.length>1){const y=d[1];for(const v of y.split(";")){if(!v)continue;const h=v.split("=");if(h.length!==2)continue;const[_,B]=h;switch(_){case Kt.Product:t=B;break;case Kt.Model:i=B;break;case Kt.Device:a=B;break;case Kt.Features:l=B.split(",");break}}}return new Ns(t,i,a,l)}get product(){return u(this,Xn)}get model(){return u(this,Zn)}get device(){return u(this,er)}get features(){return u(this,tr)}};Xn=new WeakMap,Zn=new WeakMap,er=new WeakMap,tr=new WeakMap;let ei=Ns;function as(n,e,t){let i=0n;for(let a=e;a<e+t;a+=8){i<<=64n;const l=zc(n,a);i|=l}return i}function os(n,e,t,i,a){if(a)for(;i>0n;)qc(n,e,i),e+=8,i>>=64n;else{let l=e+t-8;for(;i>0n;)Cc(n,l,i),l-=8,i>>=64n}}const nu=38,ru=2048/8,iu=303,su=2048/8;function co(n){const e=as(n,nu,ru),t=as(n,iu,su);return[e,t]}function Pa(n,e){const t=n%e;return t>0?t:t+e}function au(n,e){if(n=Pa(n,e),!n||e<2)return NaN;const t=[];let i=e;for(;i;)[n,i]=[i,n%i],t.push({a:n,b:i});if(n!==1)return NaN;let a=1,l=0;for(let d=t.length-2;d>=0;d-=1)[a,l]=[l,a-l*Math.floor(t[d].a/t[d].b)];return Pa(l,e)}const bt=2048/8,ou=bt/4;function lo(){return 8+bt+bt+4}function cu(n,e){let t;const i=lo();if(!e)e=new Uint8Array(i),t="Uint8Array";else{if(e.length<i)throw new TypeError("output buffer is too small");t="number"}const a=new DataView(e.buffer,e.byteOffset,e.length);let l=0;a.setUint32(l,ou,!0),l+=4;const[d]=co(n),y=-au(Number(d%2n**32n),2**32);a.setInt32(l,y,!0),l+=4,os(e,l,bt,d,!0),l+=bt;const v=2n**4096n%d;return os(e,l,bt,v,!0),l+=bt,a.setUint32(l,65537,!0),l+=4,t==="Uint8Array"?e:i}function lu(n,e,t){if(t===1n)return 0n;let i=1n;for(n=n%t;e>0n;)BigInt.asUintN(1,e)===1n&&(i=i*n%t),n=n*n%t,e>>=1n;return i}const qa=20,Ca=48,uu=4,hu=5,du=6,Wi=new Uint8Array([Ca,13+qa,Ca,9,du,5,43,14,3,2,26,hu,0,uu,qa]);function fu(n,e){const[t,i]=co(n),a=new Uint8Array(256);let l=0;a[l]=0,l+=1,a[l]=1,l+=1;const d=a.length-Wi.length-e.length-1;for(;l<d;)a[l]=255,l+=1;a[l]=0,l+=1,a.set(Wi,l),l+=Wi.length,a.set(e,l);const y=lu(as(a,0,a.length),i,t);return os(a,0,a.length,y,!1),a}var Y;(function(n){n[n.Auth=1213486401]="Auth",n[n.Close=1163086915]="Close",n[n.Connect=1314410051]="Connect",n[n.Okay=1497451343]="Okay",n[n.Open=1313165391]="Open",n[n.Write=1163154007]="Write"})(Y||(Y={}));const ti=new K({littleEndian:!0}).uint32("command").uint32("arg0").uint32("arg1").uint32("payloadLength").uint32("checksum").int32("magic");new K({littleEndian:!0}).concat(ti).uint8Array("payload",{lengthField:"payloadLength"});function uo(n){return n.reduce((e,t)=>e+t,0)}class pu extends bs{constructor(){const e=new Uint8Array(ti.size);super({transform:async(t,i)=>{await t.tryConsume(async a=>{const l=a;l.payloadLength=l.payload.length,await be.ReadableStream.enqueue(i,ti.serialize(l,e)),l.payloadLength&&await be.ReadableStream.enqueue(i,l.payload)})}})}}var gn;(function(n){n[n.Token=1]="Token",n[n.Signature=2]="Signature",n[n.PublicKey=3]="PublicKey"})(gn||(gn={}));const wu=async function*(n,e){for await(const t of n.iterateKeys()){const i=await e();if(i.arg0!==gn.Token)return;const a=fu(t.buffer,i.payload);yield{command:Y.Auth,arg0:gn.Signature,arg1:0,payload:a}}},gu=async function*(n,e){var v;if((await e()).arg0!==gn.Token)return;let i;for await(const h of n.iterateKeys()){i=h;break}i||(i=await n.generateKey());const a=lo(),[l]=eo(a),d=(v=i.name)!=null&&v.length?qe(i.name):Ne,y=new Uint8Array(l+(d.length?d.length+1:0)+1);cu(i.buffer,y),xl(y.subarray(0,a),y),d.length&&(y[l]=32,y.set(d,l+1)),yield{command:Y.Auth,arg0:gn.PublicKey,arg1:0,payload:y}},yu=[wu,gu];var nr,hn,Pt,li,ui,ho;class mu{constructor(e,t){m(this,ui);k(this,"authenticators");m(this,nr);m(this,hn,new re);m(this,Pt);m(this,li,()=>u(this,hn).promise);this.authenticators=e,b(this,nr,t)}async process(e){u(this,Pt)||b(this,Pt,C(this,ui,ho).call(this)),u(this,hn).resolve(e);const t=await u(this,Pt).next();if(t.done)throw new Error("No authenticator can handle the request");return t.value}dispose(){var e,t;(t=(e=u(this,Pt))==null?void 0:e.return)==null||t.call(e)}}nr=new WeakMap,hn=new WeakMap,Pt=new WeakMap,li=new WeakMap,ui=new WeakSet,ho=async function*(){for(const e of this.authenticators)for await(const t of e(u(this,nr),u(this,li)))b(this,hn,new re),yield t};var qt,rr,Je,ir,sr,ar,or,Ct,Ue,hi,fo;class Ba{constructor(e){m(this,hi);m(this,qt);k(this,"localId");k(this,"remoteId");k(this,"localCreated");k(this,"service");m(this,rr);m(this,Je);m(this,ir);k(this,"writable");m(this,sr,!1);m(this,ar,new re);m(this,or);m(this,Ct);m(this,Ue,0);b(this,qt,e.dispatcher),this.localId=e.localId,this.remoteId=e.remoteId,this.localCreated=e.localCreated,this.service=e.service,b(this,rr,new wn(t=>{b(this,Je,t)})),this.writable=new st.WritableStream({start:t=>{b(this,ir,t),t.signal.addEventListener("abort",()=>{var i;(i=u(this,Ct))==null||i.reject(t.signal.reason)})},write:async t=>{const i=t.length,a=u(this,qt).options.maxPayloadSize;for(let l=0,d=a;l<i;l=d,d+=a){const y=t.subarray(l,d);await C(this,hi,fo).call(this,y)}}}),b(this,or,new bu(this)),b(this,Ue,e.availableWriteBytes)}get readable(){return u(this,rr)}get closed(){return u(this,ar).promise}get socket(){return u(this,or)}async enqueue(e){if(!u(this,Je).abortSignal.aborted)try{await u(this,Je).enqueue(e)}catch(t){if(u(this,Je).abortSignal.aborted)return;throw t}}ack(e){var t;b(this,Ue,u(this,Ue)+e),(t=u(this,Ct))==null||t.resolve()}async close(){var e;if(!u(this,sr)){b(this,sr,!0),(e=u(this,Ct))==null||e.reject(new Error("Socket closed"));try{u(this,ir).error(new Error("Socket closed"))}catch{}await u(this,qt).sendPacket(Y.Close,this.localId,this.remoteId,Ne)}}dispose(){try{u(this,Je).close()}catch{}u(this,ar).resolve()}}qt=new WeakMap,rr=new WeakMap,Je=new WeakMap,ir=new WeakMap,sr=new WeakMap,ar=new WeakMap,or=new WeakMap,Ct=new WeakMap,Ue=new WeakMap,hi=new WeakSet,fo=async function(e){const t=e.length;for(;u(this,Ue)<t;){const i=new re;b(this,Ct,i),await i.promise}u(this,Ue)===1/0?b(this,Ue,-1):b(this,Ue,u(this,Ue)-t),await u(this,qt).sendPacket(Y.Write,this.localId,this.remoteId,e)};var ge;class bu{constructor(e){m(this,ge);b(this,ge,e)}get localId(){return u(this,ge).localId}get remoteId(){return u(this,ge).remoteId}get localCreated(){return u(this,ge).localCreated}get service(){return u(this,ge).service}get readable(){return u(this,ge).readable}get writable(){return u(this,ge).writable}get closed(){return u(this,ge).closed}close(){return u(this,ge).close()}}ge=new WeakMap;var Xe,_e,Bt,cr,dn,Rt,lr,Z,po,wo,cs,go,yo,ls;class vu{constructor(e,t){m(this,Z);m(this,Xe,new nl(1));m(this,_e,new Map);m(this,Bt);k(this,"options");m(this,cr,!1);m(this,dn,new re);m(this,Rt,new Map);m(this,lr,new xr);this.options=t,this.options.initialDelayedAckBytes<0&&(this.options.initialDelayedAckBytes=0),e.readable.pipeTo(new Ce({write:async i=>{switch(i.command){case Y.Close:await C(this,Z,po).call(this,i);break;case Y.Okay:C(this,Z,wo).call(this,i);break;case Y.Open:await C(this,Z,go).call(this,i);break;case Y.Write:await C(this,Z,yo).call(this,i);break;default:throw new Error(`Unknown command: ${i.command.toString(16)}`)}}}),{preventCancel:t.preserveConnection??!1,signal:u(this,lr).signal}).then(()=>{C(this,Z,ls).call(this)},i=>{u(this,cr)||u(this,dn).reject(i),C(this,Z,ls).call(this)}),b(this,Bt,e.writable.getWriter())}get disconnected(){return u(this,dn).promise}async createSocket(e){this.options.appendNullToServiceString&&(e+="\0");const[t,i]=u(this,Xe).add();await this.sendPacket(Y.Open,t,this.options.initialDelayedAckBytes,e);const{remoteId:a,availableWriteBytes:l}=await i,d=new Ba({dispatcher:this,localId:t,remoteId:a,localCreated:!0,service:e,availableWriteBytes:l});return u(this,_e).set(t,d),d.socket}addReverseTunnel(e,t){u(this,Rt).set(e,t)}removeReverseTunnel(e){u(this,Rt).delete(e)}clearReverseTunnels(){u(this,Rt).clear()}async sendPacket(e,t,i,a){if(typeof a=="string"&&(a=qe(a)),a.length>this.options.maxPayloadSize)throw new TypeError("payload too large");await be.WritableStream.write(u(this,Bt),{command:e,arg0:t,arg1:i,payload:a,checksum:this.options.calculateChecksum?uo(a):0,magic:e^4294967295})}async close(){await Promise.all(Array.from(u(this,_e).values(),e=>e.close())),b(this,cr,!0),u(this,lr).abort(),this.options.preserveConnection?u(this,Bt).releaseLock():await u(this,Bt).close()}}Xe=new WeakMap,_e=new WeakMap,Bt=new WeakMap,cr=new WeakMap,dn=new WeakMap,Rt=new WeakMap,lr=new WeakMap,Z=new WeakSet,po=async function(e){if(e.arg0===0&&u(this,Xe).reject(e.arg1,new Error("Socket open failed")))return;const t=u(this,_e).get(e.arg1);if(t){await t.close(),t.dispose(),u(this,_e).delete(e.arg1);return}},wo=function(e){let t;if(this.options.initialDelayedAckBytes!==0){if(e.payload.length!==4)throw new Error("Invalid OKAY packet. Payload size should be 4");t=wi(e.payload,0)}else{if(e.payload.length!==0)throw new Error("Invalid OKAY packet. Payload size should be 0");t=1/0}if(u(this,Xe).resolve(e.arg1,{remoteId:e.arg0,availableWriteBytes:t}))return;const i=u(this,_e).get(e.arg1);if(i){i.ack(t);return}this.sendPacket(Y.Close,e.arg1,e.arg0,Ne)},cs=function(e,t,i){let a;return this.options.initialDelayedAckBytes!==0?(a=new Uint8Array(4),Ac(a,0,i)):a=Ne,this.sendPacket(Y.Okay,e,t,a)},go=async function(e){const[t]=u(this,Xe).add();u(this,Xe).resolve(t,void 0);const i=e.arg0;let a=e.arg1,l=zt(e.payload);if(l.endsWith("\0")&&(l=l.substring(0,l.length-1)),this.options.initialDelayedAckBytes===0){if(a!==0)throw new Error("Invalid OPEN packet. arg1 should be 0");a=1/0}else if(a===0)throw new Error("Invalid OPEN packet. arg1 should be greater than 0");const d=u(this,Rt).get(l);if(!d){await this.sendPacket(Y.Close,0,i,Ne);return}const y=new Ba({dispatcher:this,localId:t,remoteId:i,localCreated:!1,service:l,availableWriteBytes:a});try{await d(y.socket),u(this,_e).set(t,y),await C(this,Z,cs).call(this,t,i,this.options.initialDelayedAckBytes)}catch{await this.sendPacket(Y.Close,0,i,Ne)}},yo=async function(e){const t=u(this,_e).get(e.arg1);if(!t)throw new Error(`Unknown local socket id: ${e.arg1}`);let i=!1;const a=[(async()=>{await t.enqueue(e.payload),await C(this,Z,cs).call(this,e.arg1,e.arg0,e.payload.length),i=!0})()];this.options.readTimeLimit&&a.push((async()=>{if(await rl(this.options.readTimeLimit),!i)throw new Error(`readable of \`${t.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`)})()),await Promise.race(a)},ls=function(){for(const e of u(this,_e).values())e.dispose();u(this,dn).resolve()};const Eu=16777217,Ra=[O.ShellV2,O.Cmd,O.StatV2,O.ListV2,O.FixedPushMkdir,"apex",O.Abb,"fixed_push_symlink_timestamp",O.AbbExec,"remount_shell","track_app",O.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send",O.DelayedAck],Su=32*1024*1024;var ur,Te,hr,dr,fn,fr;const Ps=class Ps{constructor({serial:e,connection:t,version:i,banner:a,features:l=Ra,initialDelayedAckBytes:d,...y}){m(this,ur);m(this,Te);m(this,hr);m(this,dr);m(this,fn);m(this,fr);if(b(this,hr,e),b(this,ur,t),b(this,fn,ei.parse(a)),b(this,fr,l),l.includes(O.DelayedAck)){if(d<=0)throw new TypeError("`initialDelayedAckBytes` must be greater than 0 when DelayedAck feature is enabled.");u(this,fn).features.includes(O.DelayedAck)||(d=0)}else d=0;let v,h;i>=Eu?(v=!1,h=!1):(v=!0,h=!0),b(this,Te,new vu(t,{calculateChecksum:v,appendNullToServiceString:h,initialDelayedAckBytes:d,...y})),b(this,dr,i)}static async authenticate({serial:e,connection:t,credentialStore:i,authenticators:a=yu,features:l=Ra,initialDelayedAckBytes:d=Su,...y}){let v=16777217,h=1024*1024;const _=new re,B=new mu(a,i),W=new xr,oe=t.readable.pipeTo(new Ce({async write(U){switch(U.command){case Y.Connect:v=Math.min(v,U.arg0),h=Math.min(h,U.arg1),_.resolve(zt(U.payload));break;case Y.Auth:{const lt=await B.process(U);await mn(lt);break}}}}),{preventCancel:!0,signal:W.signal}).then(()=>{_.reject(new Error("Connection closed unexpectedly"))},U=>{_.reject(U)}),Fe=t.writable.getWriter();async function mn(U){U.checksum=uo(U.payload),U.magic=U.command^4294967295,await be.WritableStream.write(Fe,U)}const ct=l.slice();if(d<=0){const U=l.indexOf(O.DelayedAck);U!==-1&&ct.splice(U,1)}let Wt;try{await mn({command:Y.Connect,arg0:v,arg1:h,payload:qe(`host::features=${ct.join(",")}`)}),Wt=await _.promise}finally{W.abort(),Fe.releaseLock(),await oe}return new Ps({serial:e,connection:t,version:v,maxPayloadSize:h,banner:Wt,features:ct,initialDelayedAckBytes:d,...y})}get connection(){return u(this,ur)}get serial(){return u(this,hr)}get protocolVersion(){return u(this,dr)}get maxPayloadSize(){return u(this,Te).options.maxPayloadSize}get banner(){return u(this,fn)}get disconnected(){return u(this,Te).disconnected}get clientFeatures(){return u(this,fr)}connect(e){return u(this,Te).createSocket(e)}addReverseTunnel(e,t){return t||(t=`localabstract:reverse_${Math.random().toString().substring(2)}`),u(this,Te).addReverseTunnel(t,e),t}removeReverseTunnel(e){u(this,Te).removeReverseTunnel(e)}clearReverseTunnels(){u(this,Te).clearReverseTunnels()}close(){return u(this,Te).close()}};ur=new WeakMap,Te=new WeakMap,hr=new WeakMap,dr=new WeakMap,fn=new WeakMap,fr=new WeakMap;let us=Ps;const xu=[O.ShellV2,O.Cmd,O.StatV2,O.ListV2,O.FixedPushMkdir,"apex",O.Abb,"fixed_push_symlink_timestamp",O.AbbExec,"remount_shell","track_app",O.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send"];var Ze,pr,wr;class ku{constructor(e,t,i,a){m(this,Ze);k(this,"serial");k(this,"transportId");k(this,"maxPayloadSize",1*1024*1024);k(this,"banner");m(this,pr,new re);m(this,wr,new xr);k(this,"disconnected");b(this,Ze,e),this.serial=t,this.banner=i,this.transportId=a,this.disconnected=Promise.race([u(this,pr).promise,e.waitFor({transportId:a},"disconnect",{signal:u(this,wr).signal,unref:!0})])}get clientFeatures(){return xu}async connect(e){return await u(this,Ze).createDeviceConnection({transportId:this.transportId},e)}async addReverseTunnel(e,t){return await u(this,Ze).connector.addReverseTunnel(e,t)}async removeReverseTunnel(e){await u(this,Ze).connector.removeReverseTunnel(e)}async clearReverseTunnels(){await u(this,Ze).connector.clearReverseTunnels()}close(){u(this,pr).resolve(),u(this,wr).abort()}}Ze=new WeakMap,pr=new WeakMap,wr=new WeakMap;const Lu=qe("OKAY"),mo=qe("FAIL");var et,Ot,$t;class Oa{constructor(e){m(this,et);m(this,Ot);m(this,$t);b(this,et,e),b(this,Ot,new kr(e.readable)),b(this,$t,e.writable.getWriter())}readExactly(e){return u(this,Ot).readExactly(e)}readString(){return We.try(()=>this.readExactly(4)).then(e=>{const t=Tn(e);return t===0?Ne:this.readExactly(t)}).then(e=>zt(e)).valueOrPromise()}async writeString(e){const t=qe(e),i=new Uint8Array(4+t.length);_l(i,0,t.length),i.set(t,4),await u(this,$t).write(i)}async readOkay(){const e=await this.readExactly(4);if(!Hr(e,Lu)){if(Hr(e,mo)){const t=await this.readString();throw new Error(t)}throw new Error(`Unexpected response: ${zt(e)}`)}}release(){return u(this,$t).releaseLock(),{readable:u(this,Ot).release(),writable:u(this,et).writable,closed:u(this,et).closed,close:()=>u(this,et).close()}}async dispose(){await u(this,Ot).cancel().catch(es),await u(this,$t).close().catch(es);try{await u(this,et).close()}catch{}}}et=new WeakMap,Ot=new WeakMap,$t=new WeakMap;const mt=class mt{constructor(e){k(this,"connector");k(this,"wireless",new mt.WirelessCommands(this));k(this,"mDns",new mt.MDnsCommands(this));this.connector=e}async createConnection(e,t){const i=await this.connector.connect(t),a=new Oa(i);try{await a.writeString(e)}catch(l){throw await a.dispose(),l}try{return await $a(()=>a.readOkay(),t==null?void 0:t.signal),a}catch(l){throw await a.dispose(),l}}async getVersion(){const e=await this.createConnection("host:version");try{const t=Tn(await e.readExactly(4));return Tn(await e.readExactly(t))}finally{await e.dispose()}}async validateVersion(){const e=await this.getVersion();if(e!==mt.VERSION)throw new Error(`adb server version (${e}) doesn't match this client (${mt.VERSION})`)}async killServer(){await(await this.createConnection("host:kill")).dispose()}async getServerFeatures(){const e=await this.createConnection("host:host-features");try{return(await e.readString()).split(",")}finally{await e.dispose()}}parseDeviceList(e){const t=[];for(const i of e.split(`
|
|
7
|
-
`)){if(!i)continue;const a=i.split(" ").filter(Boolean),l=a[0],d=a[1];if(d!=="device"&&d!=="unauthorized")continue;let y,v,h,_;for(let B=2;B<a.length;B+=1){const[W,oe]=a[B].split(":");switch(W){case"product":y=oe;break;case"model":v=oe;break;case"device":h=oe;break;case"transport_id":_=BigInt(oe);break}}if(!_)throw new Error(`No transport id for device ${l}`);t.push({serial:l,authenticating:d==="unauthorized",product:y,model:v,device:h,transportId:_})}return t}async getDevices(){const e=await this.createConnection("host:devices-l");try{const t=await e.readString();return this.parseDeviceList(t)}finally{await e.dispose()}}async*trackDevices(e){const t=await this.createConnection("host:track-devices-l");try{for(;;){const i=await $a(async()=>await t.readString(),e);yield this.parseDeviceList(i)}}catch(i){if(i===(e==null?void 0:e.reason))return}finally{await t.dispose()}}formatDeviceService(e,t){if(!e)return`host:${t}`;if("transportId"in e)return`host-transport-id:${e.transportId}:${t}`;if("serial"in e)return`host-serial:${e.serial}:${t}`;if("usb"in e)return`host-usb:${t}`;if("tcp"in e)return`host-local:${t}`;throw new TypeError("Invalid device selector")}async reconnectDevice(e){const t=await this.createConnection(e==="offline"?"host:reconnect-offline":this.formatDeviceService(e,"reconnect"));try{await t.readString()}finally{await t.dispose()}}async getDeviceFeatures(e){const t=await this.createDeviceConnection(e,"host:features"),i=new Oa(t);try{const l=(await i.readString()).split(",");return{transportId:t.transportId,features:l}}finally{await i.dispose()}}async createDeviceConnection(e,t){await this.validateVersion();let i,a;if(!e)i="host:tport:any";else if("transportId"in e)i=`host:transport-id:${e.transportId}`,a=e.transportId;else if("serial"in e)i=`host:tport:serial:${e.serial}`;else if("usb"in e)i="host:tport:usb";else if("tcp"in e)i="host:tport:local";else throw new TypeError("Invalid device selector");const l=await this.createConnection(i);try{await l.writeString(t)}catch(d){throw await l.dispose(),d}try{if(a===void 0){const y=await l.readExactly(8);a=Mc(y,0)}await l.readOkay();const d=l.release();return{transportId:a,service:t,readable:d.readable,writable:new Zi(d.writable).bePipedThroughFrom(new st.UnwrapStream),get closed(){return d.closed},async close(){await d.close()}}}catch(d){throw await l.dispose(),d}}async waitFor(e,t,i){let a;if(!e)a="any";else if("transportId"in e)a="any";else if("serial"in e)a="any";else if("usb"in e)a="usb";else if("tcp"in e)a="local";else throw new TypeError("Invalid device selector");const l=this.formatDeviceService(e,`wait-for-${a}-${t}`),d=await this.createConnection(l,i);try{await d.readOkay()}finally{await d.dispose()}}async createTransport(e){const{transportId:t,features:i}=await this.getDeviceFeatures(e),l=(await this.getDevices()).find(y=>y.transportId===t),d=new ei(l==null?void 0:l.product,l==null?void 0:l.model,l==null?void 0:l.device,i);return new ku(this,(l==null?void 0:l.serial)??"",d,t)}};k(mt,"VERSION",41);let ni=mt;async function $a(n,...e){const t=new re;function i(){t.reject(this.reason)}try{for(const a of e)if(a){if(a.aborted)throw a.reason;a.addEventListener("abort",i)}return await Promise.race([n(),t.promise])}finally{for(const a of e)a&&a.removeEventListener("abort",i)}}(function(n){var d,y;class e extends Error{constructor(h){super(h),this.name="NetworkError"}}n.NetworkError=e;class t extends Error{constructor(h){super(h),this.name="UnauthorizedError"}}n.UnauthorizedError=t;class i extends Error{constructor(h){super(h),this.name="AlreadyConnectedError"}}n.AlreadyConnectedError=i;class a{constructor(h){m(this,d);b(this,d,h)}async pair(h,_){const B=await u(this,d).createConnection(`host:pair:${_}:${h}`);try{const W=await B.readExactly(4);if(Hr(W,mo))throw new Error(await B.readString());const oe=Tn(W);await B.readExactly(oe)}finally{await B.dispose()}}async connect(h){const _=await u(this,d).createConnection(`host:connect:${h}`);try{const B=await _.readString();switch(B){case`already connected to ${h}`:throw new n.AlreadyConnectedError(B);case`failed to connect to ${h}`:case`failed to authenticate to ${h}`:throw new n.UnauthorizedError(B);case`connected to ${h}`:return;default:throw new n.NetworkError(B)}}finally{await _.dispose()}}async disconnect(h){const _=await u(this,d).createConnection(`host:disconnect:${h}`);try{await _.readString()}finally{await _.dispose()}}}d=new WeakMap,n.WirelessCommands=a;class l{constructor(h){m(this,y);b(this,y,h)}async check(){const h=await u(this,y).createConnection("host:mdns:check");try{return!(await h.readString()).startsWith("ERROR:")}finally{await h.dispose()}}async getServices(){const h=await u(this,y).createConnection("host:mdns:services");try{return(await h.readString()).split(`
|
|
8
|
-
`).filter(Boolean).map(B=>{const W=B.split(" ");return{name:W[0],service:W[1],address:W[2]}})}finally{await h.dispose()}}}y=new WeakMap,n.MDnsCommands=l})(ni||(ni={}));function bo(n,e){return typeof n=="object"&&n!==null&&"name"in n&&n.name===e}function _u(n,e){return e.some(t=>n.interfaceClass===t.classCode&&n.interfaceSubclass===t.subclassCode&&n.interfaceProtocol===t.protocolCode)}function vo(n,e){for(const t of n.configurations)for(const i of t.interfaces)for(const a of i.alternates)if(_u(a,e))return{configuration:t,interface_:i,alternate:a};throw new TypeError("No matched alternate interface found")}function Aa(n){return n.toString(16).padStart(4,"0")}function Eo(n){return n.serialNumber?n.serialNumber:Aa(n.vendorId)+"x"+Aa(n.productId)}const hs={classCode:255,subclassCode:66,protocolCode:1};function Tu(n){if(n.length===0)throw new TypeError("No endpoints given");let e,t;for(const i of n)switch(i.direction){case"in":if(e=i,t)return{inEndpoint:e,outEndpoint:t};break;case"out":if(t=i,e)return{inEndpoint:e,outEndpoint:t};break}throw e?t?new Error("unreachable"):new TypeError("No output endpoint found."):new TypeError("No input endpoint found.")}var gr,tt;class Iu{constructor(e){m(this,gr);m(this,tt);b(this,gr,e),b(this,tt,0)}get position(){return u(this,tt)}readExactly(e){const t=u(this,gr).subarray(u(this,tt),u(this,tt)+e);return b(this,tt,u(this,tt)+e),t}}gr=new WeakMap,tt=new WeakMap;var At,nt,yr,mr,br,di,So;class Du{constructor(e,t,i,a){m(this,di);m(this,At);m(this,nt);m(this,yr);m(this,mr);m(this,br);b(this,At,e),b(this,nt,t),b(this,yr,i);let l=!1;const d=new hl({close:async()=>{try{l=!0,await e.raw.close()}catch{}},dispose:()=>{l=!0,a.removeEventListener("disconnect",y)}});function y(h){h.device===e.raw&&d.dispose().catch(to)}a.addEventListener("disconnect",y),b(this,mr,d.wrapReadable(new Ut({pull:async h=>{const _=await C(this,di,So).call(this);_?h.enqueue(_):h.close()}},{highWaterMark:0})));const v=i.packetSize-1;b(this,br,fl(d.createWritable(new st.WritableStream({write:async h=>{try{await e.raw.transferOut(i.endpointNumber,h),v&&(h.length&v)===0&&await e.raw.transferOut(i.endpointNumber,Ne)}catch(_){if(l)return;throw _}}})),new pu))}get device(){return u(this,At)}get inEndpoint(){return u(this,nt)}get outEndpoint(){return u(this,yr)}get readable(){return u(this,mr)}get writable(){return u(this,br)}}At=new WeakMap,nt=new WeakMap,yr=new WeakMap,mr=new WeakMap,br=new WeakMap,di=new WeakSet,So=async function(){try{for(;;){const e=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,u(this,nt).packetSize);if(e.data.byteLength!==24)continue;const t=new Uint8Array(e.data.buffer),i=new Iu(t),a=ti.deserialize(i);if(a.magic===(a.command^4294967295)){if(a.payloadLength!==0){const l=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,a.payloadLength);a.payload=new Uint8Array(l.data.buffer)}else a.payload=Ne;return a}}}catch(e){if(bo(e,"NetworkError")){if(await new Promise(t=>{setTimeout(()=>{t()},100)}),closed)return;throw e}throw e}};var vr,Er,le,Sr,fi,xo;class Ma{constructor(e,t=[hs],i){m(this,fi);m(this,vr);m(this,Er);m(this,le);m(this,Sr);b(this,le,e),b(this,Sr,Eo(e)),b(this,vr,t),b(this,Er,i)}get raw(){return u(this,le)}get serial(){return u(this,Sr)}get name(){return u(this,le).productName}async connect(){const[e,t]=await C(this,fi,xo).call(this);return new Du(this,e,t,u(this,Er))}}vr=new WeakMap,Er=new WeakMap,le=new WeakMap,Sr=new WeakMap,fi=new WeakSet,xo=async function(){var d;u(this,le).opened||await u(this,le).open();const{configuration:e,interface_:t,alternate:i}=vo(u(this,le),u(this,vr));((d=u(this,le).configuration)==null?void 0:d.configurationValue)!==e.configurationValue&&await u(this,le).selectConfiguration(e.configurationValue),t.claimed||await u(this,le).claimInterface(t.interfaceNumber),t.alternate.alternateSetting!==i.alternateSetting&&await u(this,le).selectAlternateInterface(t.interfaceNumber,i.alternateSetting);const{inEndpoint:a,outEndpoint:l}=Tu(i.endpoints);return[a,l]};var rt;const pi=class pi{constructor(e){m(this,rt);b(this,rt,e)}async requestDevice(e={}){if(!e.filters)e.filters=[hs];else if(e.filters.length===0)throw new TypeError("filters must not be empty");try{const t=await u(this,rt).requestDevice(e);return new Ma(t,e.filters,u(this,rt))}catch(t){if(bo(t,"NotFoundError"))return;throw t}}async getDevices(e=[hs]){if(e.length===0)throw new TypeError("filters must not be empty");return(await u(this,rt).getDevices()).filter(i=>{for(const a of e)if(!("vendorId"in a&&i.vendorId!==a.vendorId)&&!("productId"in a&&i.productId!==a.productId)&&!("serialNumber"in a&&Eo(i)!==a.serialNumber))try{return vo(i,e),!0}catch{continue}return!1}).map(i=>new Ma(i,e,u(this,rt)))}};rt=new WeakMap,k(pi,"BROWSER",typeof globalThis.navigator<"u"&&globalThis.navigator.usb?new pi(globalThis.navigator.usb):void 0);let ds=pi;function ko(){return new Promise((n,e)=>{const t=indexedDB.open("Tango",1);t.onerror=()=>{e(t.error)},t.onupgradeneeded=()=>{t.result.createObjectStore("Authentication",{autoIncrement:!0})},t.onsuccess=()=>{const i=t.result;n(i)}})}async function Nu(n){const e=await ko();return new Promise((t,i)=>{const a=e.transaction("Authentication","readwrite"),d=a.objectStore("Authentication").add(n);d.onerror=()=>{i(d.error)},d.onsuccess=()=>{t()},a.onerror=()=>{i(a.error)},a.oncomplete=()=>{e.close()}})}async function Pu(){const n=await ko();return new Promise((e,t)=>{const i=n.transaction("Authentication","readonly"),l=i.objectStore("Authentication").getAll();l.onerror=()=>{t(l.error)},l.onsuccess=()=>{e(l.result)},i.onerror=()=>{t(i.error)},i.oncomplete=()=>{n.close()}})}var pn;class qu{constructor(e="Tango"){m(this,pn);b(this,pn,e)}async generateKey(){const{privateKey:e}=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-1"},!0,["sign","verify"]),t=new Uint8Array(await crypto.subtle.exportKey("pkcs8",e));return await Nu(t),{buffer:t,name:`${u(this,pn)}@${globalThis.location.hostname}`}}async*iterateKeys(){for(const e of await Pu())yield{buffer:e,name:`${u(this,pn)}@${globalThis.location.hostname}`}}}pn=new WeakMap;const Ht=ds.BROWSER,Cu=new qu;class Bu{constructor(){this.adb=null,this.device=null,this.packageName="",this.dbName="",this.dbPath="",this.sqlite3Path="",this.mode="webusb",this.bridgeUrl="",this.bridgeSerial="",this._runAsWorks=null,this._appDataDir=""}async connectBridge(e=15555){const t=[];(location.hostname==="127.0.0.1"||location.hostname==="localhost")&&t.push(location.origin),t.push(`http://127.0.0.1:${e}`);const a=new Set;for(const l of t)if(!a.has(l)){a.add(l);try{if((await(await fetch(`${l}/api/ping`,{signal:AbortSignal.timeout(2e3)})).json()).ok)return this.mode="bridge",this.bridgeUrl=l,!0}catch{}}return!1}async _bridgeShell(e){const t=await fetch(`${this.bridgeUrl}/api/shell`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:e,serial:this.bridgeSerial||void 0})}),i=await t.json();if(!t.ok)throw new Error(i.error||"Bridge shell command failed");return(i.output||"").replace(/\r\n/g,`
|
|
9
|
-
`).trimEnd()}async _bridgeGetDevices(){const e=await fetch(`${this.bridgeUrl}/api/devices`),t=await e.json();if(!e.ok)throw new Error(t.error||"Bridge devices request failed");return t.devices||[]}async requestDevice(){if(!Ht)throw new Error("WebUSB is not supported in this browser. Use Chrome or Edge.");const e=await Ht.requestDevice();if(!e)throw new Error("No device selected.");return await this._connectDevice(e),this.getDeviceInfo()}async getDevices(){return this.mode==="bridge"?this._bridgeGetDevices():Ht?(await Ht.getDevices()).map(t=>({serial:t.serial,name:t.name,display_name:`${t.name||t.serial} (${t.serial})`})):[]}async connectBySerial(e){if(this.mode==="bridge")return this.bridgeSerial=e,this.getDeviceInfo();if(!Ht)throw new Error("WebUSB not supported.");const i=(await Ht.getDevices()).find(a=>a.serial===e);if(!i)throw new Error(`Device ${e} not found.`);return await this._connectDevice(i),this.getDeviceInfo()}async _connectDevice(e){var a;await this.disconnect();let t;try{t=await e.connect()}catch(l){throw(a=l==null?void 0:l.message)!=null&&a.includes("claimInterface")?new Error("Cannot claim USB device — another program (likely ADB) is using it. Run 'adb kill-server' in your terminal, then retry."):l}const i=await us.authenticate({serial:e.serial,connection:t,credentialStore:Cu});this.adb=new tu(i),this.device=e}async disconnect(){if(this.mode==="bridge"){this.bridgeSerial="",this.bridgeUrl="",this.mode="webusb";return}if(this.adb){try{await this.adb.close()}catch{}this.adb=null,this.device=null}}checkConnection(){const e=this.mode==="bridge"?!!this.bridgeUrl:!!this.adb;return{connected:e,device:e?this.getDeviceInfo():null,package:this.packageName,database:this.dbName}}getDeviceInfo(){return this.mode==="bridge"?this.bridgeSerial?{serial:this.bridgeSerial,name:this.bridgeSerial,display_name:`${this.bridgeSerial} (ADB Bridge)`}:null:this.device?{serial:this.device.serial,name:this.device.name,display_name:`${this.device.name||this.device.serial} (${this.device.serial})`}:null}setPackage(e){this.packageName=e,this.dbName="",this.dbPath="",this.sqlite3Path="",this._runAsWorks=null,this._appDataDir=""}setDatabase(e,t){this.dbName=e,this.dbPath=t||""}async shell(e){if(this.mode==="bridge")return this._bridgeShell(e);if(!this.adb)throw new Error("Not connected to a device.");const t=await this.adb.subprocess.spawnAndWaitLegacy(e);let i;return typeof t=="string"?i=t:t instanceof Uint8Array?i=new TextDecoder().decode(t):(t==null?void 0:t.stdout)!==void 0?i=typeof t.stdout=="string"?t.stdout:new TextDecoder().decode(t.stdout):i=String(t),i.replace(/\r\n/g,`
|
|
10
|
-
`).trimEnd()}async runAs(e){if(this._runAsWorks===null)try{await this.shell(`run-as ${this.packageName} id`),this._runAsWorks=!0}catch{this._runAsWorks=!1;try{const i=(await this.shell(`dumpsys package ${this.packageName} | grep dataDir | head -1`)).match(/dataDir=(.+)/);this._appDataDir=i?i[1].trim():`/data/data/${this.packageName}`}catch{this._appDataDir=`/data/data/${this.packageName}`}}return this._runAsWorks?this.shell(`run-as ${this.packageName} ${e}`):this.shell(`cd ${this._appDataDir} && ${e}`)}async getPackages(){let i=(await this.shell('for p in $(pm list packages --user 0 -3 2>/dev/null | tr -d "\\r" | sed "s/package://"); do run-as $p id 2>/dev/null 1>/dev/null && echo $p; done')).split(`
|
|
11
|
-
`).map(a=>a.trim()).filter(Boolean);return i.length===0&&(i=(await this.shell('pm list packages -3 2>/dev/null | tr -d "\\r" | sed "s/package://"')).split(`
|
|
12
|
-
`).map(l=>l.trim()).filter(Boolean)),i.sort(),i}async getDatabases(e){if(!(e||this.packageName))throw new Error("No package selected.");const i=["databases","files","files/SQLite"],a=[],l=new Set;for(const d of i)try{const y=await this.runAs(`ls ${d} 2>/dev/null`);for(const v of y.split(`
|
|
13
|
-
`)){const h=v.trim();h&&(h.endsWith(".db")||h.endsWith(".sqlite")||h.endsWith(".sqlite3"))&&(l.has(h)||(l.add(h),a.push({name:h,path:`${d}/${h}`})))}}catch{}return a}async searchDatabases(e,t){if(!(e||this.packageName))throw new Error("No package selected.");const a=await this.runAs('find . -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null'),l=(t||"").toLowerCase(),d=[];for(const y of a.split(`
|
|
14
|
-
`)){let v=y.trim();if(!v)continue;v.startsWith("./")&&(v=v.slice(2));const h=v.split("/").pop();h.endsWith("-journal")||h.endsWith("-wal")||h.endsWith("-shm")||(!l||h.toLowerCase().includes(l)||v.toLowerCase().includes(l))&&d.push({name:h,path:v})}return d.sort((y,v)=>y.name.toLowerCase().localeCompare(v.name.toLowerCase())),d}async ensureSqlite3(){if(this.sqlite3Path)return this.sqlite3Path;try{const t=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(t.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}const e=["/system/bin/sqlite3","/system/xbin/sqlite3","/data/local/tmp/sqlite3"];for(const t of e)try{const i=await this.shell(`${t} -version 2>&1`);if(/^3\.\d+/.test(i.trim())){try{await this.runAs(`cp ${t} ./sqlite3`),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path=t,this.sqlite3Path}}catch{}if(this.mode==="bridge"&&this.bridgeUrl)try{const t=await fetch(`${this.bridgeUrl}/api/push-sqlite3`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:this.bridgeSerial||void 0})}),i=await t.json();if(t.ok&&i.ok){try{await this.runAs("cp /data/local/tmp/sqlite3 ./sqlite3"),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path="/data/local/tmp/sqlite3",this.sqlite3Path}}catch{}throw new Error("sqlite3 not found on device. Ensure a sqlite3 binary is available at /system/bin/sqlite3 or /data/local/tmp/sqlite3.")}async findDatabasePath(){if(this.dbPath)return this.dbPath;const e=[`databases/${this.dbName}`,`files/${this.dbName}`,`files/SQLite/${this.dbName}`];for(const t of e)try{if((await this.runAs(`ls ${t}`)).includes(this.dbName))return this.dbPath=t,t}catch{}throw new Error(`Database ${this.dbName} not found on device.`)}async _sqliteJson(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -json "${a}"`,d=await this.runAs(l);if(!d)return[];try{const y=JSON.parse(d);return Array.isArray(y)?y:[]}catch{return this._sqliteFallback(e,t,i)}}async _sqliteFallback(e,t,i){const a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -header -separator "|" "${a}"`,y=(await this.runAs(l)).split(`
|
|
15
|
-
`).filter(Boolean);if(y.length===0)return[];const v=y[0].split("|").map(_=>_.trim()),h=[];for(let _=1;_<y.length;_++){const B=y[_].split("|").map(W=>W.trim());if(B.length===v.length){const W={};v.forEach((oe,Fe)=>W[oe]=B[Fe]),h.push(W)}}return h}async _sqliteExec(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} "${a}"`;await this.runAs(l)}_isWriteQuery(e){const t=e.trim().toUpperCase();return["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(i=>t.startsWith(i))}async getTables(){return(await this._sqliteJson("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")).map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){return this._sqliteJson(`PRAGMA table_info(${e});`)}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const l=await this._sqliteJson(`SELECT * FROM ${e} LIMIT ${t} OFFSET ${i};`),d=await this._sqliteJson(`SELECT COUNT(*) as count FROM ${e};`),y=d.length?Number(d[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){const i=e.trim();if(this._isWriteQuery(i))return await this._sqliteExec(i),{columns:[],rows:[],row_count:0};let a=i;t&&!i.toUpperCase().includes("LIMIT")&&i.toUpperCase().startsWith("SELECT")&&(a=`${i.replace(/;$/,"")} LIMIT ${t};`);const l=await this._sqliteJson(a);return{columns:l.length?Object.keys(l[0]):[],rows:l,row_count:l.length}}async checkDatabaseExists(){try{return await this.findDatabasePath(),!0}catch{return!1}}}function Ru(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Fi={exports:{}},za;function Ou(){return za||(za=1,(function(n,e){var t=void 0,i=function(a){return t||(t=new Promise(function(l,d){var fa,pa;var y=typeof a<"u"?a:{},v=y.onAbort;y.onAbort=function(r){d(new Error(r)),v&&v(r)},y.postRun=y.postRun||[],y.postRun.push(function(){l(y)}),n=void 0;var h;h||(h=typeof y<"u"?y:{});var _=!!globalThis.window,B=!!globalThis.WorkerGlobalScope;h.onRuntimeInitialized=function(){function r(p,S){switch(typeof S){case"boolean":xc(p,S?1:0);break;case"number":vc(p,S);break;case"string":Ec(p,S,-1,-1);break;case"object":if(S===null)va(p);else if(S.length!=null){var L=Mr(S.length);Q.set(S,L),Sc(p,L,S.length,-1),_n(L)}else Fr(p,"Wrong API use : tried to return a value of an unknown type ("+S+").",-1);break;default:va(p)}}function s(p,S){for(var L=[],T=0;T<p;T+=1){var q=Be(S+4*T,"i32"),R=wc(q);if(R===1||R===2)q=bc(q);else if(R===3)q=yc(q);else if(R===4){R=q,q=gc(R),R=mc(R);for(var Ee=new Uint8Array(q),fe=0;fe<q;fe+=1)Ee[fe]=Q[R+fe];q=Ee}else q=null;L.push(q)}return L}function o(p,S){this.Qa=p,this.db=S,this.Oa=1,this.yb=[]}function c(p,S){if(this.db=S,this.ob=Ar(p),this.ob===null)throw Error("Unable to allocate memory for the SQL string");this.ub=this.ob,this.gb=this.Fb=null}function f(p){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),p!=null){var S=this.filename,L="/",T=S;if(L&&(L=typeof L=="string"?L:Li(L),T=S?Si(L+"/"+S):L),S=Vs(!0,!0),T=Vo(T,S),p){if(typeof p=="string"){L=Array(p.length);for(var q=0,R=p.length;q<R;++q)L[q]=p.charCodeAt(q);p=L}Br(T,S|146),L=Qt(T,577),sa(L,p,0,p.length,0),Pi(L),Br(T,S)}}this.handleError(I(this.filename,g)),this.db=Be(g,"i32"),Sa(this.db),this.pb={},this.Sa={}}var g=pt(4),E=h.cwrap,I=E("sqlite3_open","number",["string","number"]),$=E("sqlite3_close_v2","number",["number"]),P=E("sqlite3_exec","number",["number","string","number","number","number"]),z=E("sqlite3_changes","number",["number"]),G=E("sqlite3_prepare_v2","number",["number","string","number","number","number"]),wa=E("sqlite3_sql","string",["number"]),Xo=E("sqlite3_normalized_sql","string",["number"]),ga=E("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Zo=E("sqlite3_bind_text","number",["number","number","number","number","number"]),ya=E("sqlite3_bind_blob","number",["number","number","number","number","number"]),ec=E("sqlite3_bind_double","number",["number","number","number"]),tc=E("sqlite3_bind_int","number",["number","number","number"]),nc=E("sqlite3_bind_parameter_index","number",["number","string"]),rc=E("sqlite3_step","number",["number"]),ic=E("sqlite3_errmsg","string",["number"]),sc=E("sqlite3_column_count","number",["number"]),ac=E("sqlite3_data_count","number",["number"]),oc=E("sqlite3_column_double","number",["number","number"]),ma=E("sqlite3_column_text","string",["number","number"]),cc=E("sqlite3_column_blob","number",["number","number"]),lc=E("sqlite3_column_bytes","number",["number","number"]),uc=E("sqlite3_column_type","number",["number","number"]),hc=E("sqlite3_column_name","string",["number","number"]),dc=E("sqlite3_reset","number",["number"]),fc=E("sqlite3_clear_bindings","number",["number"]),pc=E("sqlite3_finalize","number",["number"]),ba=E("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),wc=E("sqlite3_value_type","number",["number"]),gc=E("sqlite3_value_bytes","number",["number"]),yc=E("sqlite3_value_text","string",["number"]),mc=E("sqlite3_value_blob","number",["number"]),bc=E("sqlite3_value_double","number",["number"]),vc=E("sqlite3_result_double","",["number","number"]),va=E("sqlite3_result_null","",["number"]),Ec=E("sqlite3_result_text","",["number","string","number","number"]),Sc=E("sqlite3_result_blob","",["number","number","number","number"]),xc=E("sqlite3_result_int","",["number","number"]),Fr=E("sqlite3_result_error","",["number","string","number"]),Ea=E("sqlite3_aggregate_context","number",["number","number"]),Sa=E("RegisterExtensionFunctions","number",["number"]),xa=E("sqlite3_update_hook","number",["number","number","number"]);o.prototype.bind=function(p){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(p)?this.Wb(p):p!=null&&typeof p=="object"?this.Xb(p):!0},o.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var p=rc(this.Qa);switch(p){case 100:return!0;case 101:return!1;default:throw this.db.handleError(p)}},o.prototype.Pb=function(p){return p==null&&(p=this.Oa,this.Oa+=1),oc(this.Qa,p)},o.prototype.hc=function(p){if(p==null&&(p=this.Oa,this.Oa+=1),p=ma(this.Qa,p),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(p)},o.prototype.mc=function(p){return p==null&&(p=this.Oa,this.Oa+=1),ma(this.Qa,p)},o.prototype.getBlob=function(p){p==null&&(p=this.Oa,this.Oa+=1);var S=lc(this.Qa,p);p=cc(this.Qa,p);for(var L=new Uint8Array(S),T=0;T<S;T+=1)L[T]=Q[p+T];return L},o.prototype.get=function(p,S){S=S||{},p!=null&&this.bind(p)&&this.step(),p=[];for(var L=ac(this.Qa),T=0;T<L;T+=1)switch(uc(this.Qa,T)){case 1:var q=S.useBigInt?this.hc(T):this.Pb(T);p.push(q);break;case 2:p.push(this.Pb(T));break;case 3:p.push(this.mc(T));break;case 4:p.push(this.getBlob(T));break;default:p.push(null)}return p},o.prototype.Db=function(){for(var p=[],S=sc(this.Qa),L=0;L<S;L+=1)p.push(hc(this.Qa,L));return p},o.prototype.Ob=function(p,S){p=this.get(p,S),S=this.Db();for(var L={},T=0;T<S.length;T+=1)L[S[T]]=p[T];return L},o.prototype.lc=function(){return wa(this.Qa)},o.prototype.ic=function(){return Xo(this.Qa)},o.prototype.Jb=function(p){return p!=null&&this.bind(p),this.step(),this.reset()},o.prototype.Lb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),p=Ar(p),this.yb.push(p),this.db.handleError(Zo(this.Qa,S,p,-1,0))},o.prototype.Vb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1);var L=Mr(p.length);Q.set(p,L),this.yb.push(L),this.db.handleError(ya(this.Qa,S,L,p.length,0))},o.prototype.Kb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),this.db.handleError((p===(p|0)?tc:ec)(this.Qa,S,p))},o.prototype.Yb=function(p){p==null&&(p=this.Oa,this.Oa+=1),ya(this.Qa,p,0,0,0)},o.prototype.Mb=function(p,S){switch(S==null&&(S=this.Oa,this.Oa+=1),typeof p){case"string":this.Lb(p,S);return;case"number":this.Kb(p,S);return;case"bigint":this.Lb(p.toString(),S);return;case"boolean":this.Kb(p+0,S);return;case"object":if(p===null){this.Yb(S);return}if(p.length!=null){this.Vb(p,S);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+p+")."},o.prototype.Xb=function(p){var S=this;return Object.keys(p).forEach(function(L){var T=nc(S.Qa,L);T!==0&&S.Mb(p[L],T)}),!0},o.prototype.Wb=function(p){for(var S=0;S<p.length;S+=1)this.Mb(p[S],S+1);return!0},o.prototype.reset=function(){return this.Cb(),fc(this.Qa)===0&&dc(this.Qa)===0},o.prototype.Cb=function(){for(var p;(p=this.yb.pop())!==void 0;)_n(p)},o.prototype.cb=function(){this.Cb();var p=pc(this.Qa)===0;return delete this.db.pb[this.Qa],this.Qa=0,p},c.prototype.next=function(){if(this.ob===null)return{done:!0};if(this.gb!==null&&(this.gb.cb(),this.gb=null),!this.db.db)throw this.Ab(),Error("Database closed");var p=Ur(),S=pt(4);Sn(g),Sn(S);try{this.db.handleError(ga(this.db.db,this.ub,-1,g,S)),this.ub=Be(S,"i32");var L=Be(g,"i32");return L===0?(this.Ab(),{done:!0}):(this.gb=new o(L,this.db),this.db.pb[L]=this.gb,{value:this.gb,done:!1})}catch(T){throw this.Fb=j(this.ub),this.Ab(),T}finally{zr(p)}},c.prototype.Ab=function(){_n(this.ob),this.ob=null},c.prototype.jc=function(){return this.Fb!==null?this.Fb:j(this.ub)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(c.prototype[Symbol.iterator]=function(){return this}),f.prototype.Jb=function(p,S){if(!this.db)throw"Database closed";if(S){p=this.Gb(p,S);try{p.step()}finally{p.cb()}}else this.handleError(P(this.db,p,0,0,g));return this},f.prototype.exec=function(p,S,L){if(!this.db)throw"Database closed";var T=null,q=null,R=null;try{R=q=Ar(p);var Ee=pt(4);for(p=[];Be(R,"i8")!==0;){Sn(g),Sn(Ee),this.handleError(ga(this.db,R,-1,g,Ee));var fe=Be(g,"i32");if(R=Be(Ee,"i32"),fe!==0){var ce=null;for(T=new o(fe,this),S!=null&&T.bind(S);T.step();)ce===null&&(ce={columns:T.Db(),values:[]},p.push(ce)),ce.values.push(T.get(null,L));T.cb()}}return p}catch(Se){throw T&&T.cb(),Se}finally{q&&_n(q)}},f.prototype.ec=function(p,S,L,T,q){typeof S=="function"&&(T=L,L=S,S=void 0),p=this.Gb(p,S);try{for(;p.step();)L(p.Ob(null,q))}finally{p.cb()}if(typeof T=="function")return T()},f.prototype.Gb=function(p,S){if(Sn(g),this.handleError(G(this.db,p,-1,g,0)),p=Be(g,"i32"),p===0)throw"Nothing to prepare";var L=new o(p,this);return S!=null&&L.bind(S),this.pb[p]=L},f.prototype.pc=function(p){return new c(p,this)},f.prototype.fc=function(){Object.values(this.pb).forEach(function(S){S.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.handleError($(this.db));var p=jo(this.filename);return this.handleError(I(this.filename,g)),this.db=Be(g,"i32"),Sa(this.db),p},f.prototype.close=function(){this.db!==null&&(Object.values(this.pb).forEach(function(p){p.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.fb&&(Qe(this.fb),this.fb=void 0),this.handleError($(this.db)),ea("/"+this.filename),this.db=null)},f.prototype.handleError=function(p){if(p===0)return null;throw p=ic(this.db),Error(p)},f.prototype.kc=function(){return z(this.db)},f.prototype.bc=function(p,S){Object.prototype.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]);var L=Ln(function(T,q,R){q=s(q,R);try{var Ee=S.apply(null,q)}catch(fe){Fr(T,fe,-1);return}r(T,Ee)},"viii");return this.Sa[p]=L,this.handleError(ba(this.db,p,S.length,1,0,L,0,0,0)),this},f.prototype.ac=function(p,S){var L=S.init||function(){return null},T=S.finalize||function(ce){return ce},q=S.step;if(!q)throw"An aggregate function must have a step function in "+p;var R={};Object.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]),S=p+"__finalize",Object.hasOwnProperty.call(this.Sa,S)&&(Qe(this.Sa[S]),delete this.Sa[S]);var Ee=Ln(function(ce,Se,Ai){var wt=Ea(ce,1);Object.hasOwnProperty.call(R,wt)||(R[wt]=L()),Se=s(Se,Ai),Se=[R[wt]].concat(Se);try{R[wt]=q.apply(null,Se)}catch(kc){delete R[wt],Fr(ce,kc,-1)}},"viii"),fe=Ln(function(ce){var Se=Ea(ce,1);try{var Ai=T(R[Se])}catch(wt){delete R[Se],Fr(ce,wt,-1);return}r(ce,Ai),delete R[Se]},"vi");return this.Sa[p]=Ee,this.Sa[S]=fe,this.handleError(ba(this.db,p,q.length-1,1,0,0,Ee,fe,0)),this},f.prototype.vc=function(p){return this.fb&&(xa(this.db,0,0),Qe(this.fb),this.fb=void 0),p?(this.fb=Ln(function(S,L,T,q,R){switch(L){case 18:S="insert";break;case 23:S="update";break;case 9:S="delete";break;default:throw"unknown operationCode in updateHook callback: "+L}if(T=j(T),q=j(q),R>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";p(S,T,q,Number(R))},"viiiij"),xa(this.db,this.fb,0),this):this},o.prototype.bind=o.prototype.bind,o.prototype.step=o.prototype.step,o.prototype.get=o.prototype.get,o.prototype.getColumnNames=o.prototype.Db,o.prototype.getAsObject=o.prototype.Ob,o.prototype.getSQL=o.prototype.lc,o.prototype.getNormalizedSQL=o.prototype.ic,o.prototype.run=o.prototype.Jb,o.prototype.reset=o.prototype.reset,o.prototype.freemem=o.prototype.Cb,o.prototype.free=o.prototype.cb,c.prototype.next=c.prototype.next,c.prototype.getRemainingSQL=c.prototype.jc,f.prototype.run=f.prototype.Jb,f.prototype.exec=f.prototype.exec,f.prototype.each=f.prototype.ec,f.prototype.prepare=f.prototype.Gb,f.prototype.iterateStatements=f.prototype.pc,f.prototype.export=f.prototype.fc,f.prototype.close=f.prototype.close,f.prototype.handleError=f.prototype.handleError,f.prototype.getRowsModified=f.prototype.kc,f.prototype.create_function=f.prototype.bc,f.prototype.create_aggregate=f.prototype.ac,f.prototype.updateHook=f.prototype.vc,h.Database=f};var W="./this.program",oe=(pa=(fa=globalThis.document)==null?void 0:fa.currentScript)==null?void 0:pa.src;B&&(oe=self.location.href);var Fe="",mn,ct;if(_||B){try{Fe=new URL(".",oe).href}catch{}B&&(ct=r=>{var s=new XMLHttpRequest;return s.open("GET",r,!1),s.responseType="arraybuffer",s.send(null),new Uint8Array(s.response)}),mn=async r=>{if(r=await fetch(r,{credentials:"same-origin"}),r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)}}var Wt=console.log.bind(console),U=console.error.bind(console),lt,Tr=!1,mi,Q,ee,bn,F,A,bi,vi,ve;function qs(){var r=Wr.buffer;Q=new Int8Array(r),bn=new Int16Array(r),ee=new Uint8Array(r),F=new Int32Array(r),A=new Uint32Array(r),bi=new Float32Array(r),vi=new Float64Array(r),ve=new BigInt64Array(r),new BigUint64Array(r)}function vn(r){var s;throw(s=h.onAbort)==null||s.call(h,r),r="Aborted("+r+")",U(r),Tr=!0,new WebAssembly.RuntimeError(r+". Build with -sASSERTIONS for more info.")}var Ei;async function No(r){if(!lt)try{var s=await mn(r);return new Uint8Array(s)}catch{}if(r==Ei&<)r=new Uint8Array(lt);else if(ct)r=ct(r);else throw"both async and sync fetching of the wasm failed";return r}async function Po(r,s){try{var o=await No(r);return await WebAssembly.instantiate(o,s)}catch(c){U(`failed to asynchronously prepare wasm: ${c}`),vn(c)}}async function qo(r){var s=Ei;if(!lt)try{var o=fetch(s,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(o,r)}catch(c){U(`wasm streaming compile failed: ${c}`),U("falling back to ArrayBuffer instantiation")}return Po(s,r)}class Cs{constructor(s){k(this,"name","ExitStatus");this.message=`Program terminated with exit(${s})`,this.status=s}}var Bs=r=>{for(;0<r.length;)r.shift()(h)},Rs=[],Os=[],Co=()=>{var r=h.preRun.shift();Os.push(r)},ut=0,En=null;function Be(r,s="i8"){switch(s.endsWith("*")&&(s="*"),s){case"i1":return Q[r];case"i8":return Q[r];case"i16":return bn[r>>1];case"i32":return F[r>>2];case"i64":return ve[r>>3];case"float":return bi[r>>2];case"double":return vi[r>>3];case"*":return A[r>>2];default:vn(`invalid type for getValue: ${s}`)}}var Ir=!0;function Sn(r){var s="i32";switch(s.endsWith("*")&&(s="*"),s){case"i1":Q[r]=0;break;case"i8":Q[r]=0;break;case"i16":bn[r>>1]=0;break;case"i32":F[r>>2]=0;break;case"i64":ve[r>>3]=BigInt(0);break;case"float":bi[r>>2]=0;break;case"double":vi[r>>3]=0;break;case"*":A[r>>2]=0;break;default:vn(`invalid type for setValue: ${s}`)}}var $s=new TextDecoder,As=(r,s,o,c)=>{if(o=s+o,c)return o;for(;r[s]&&!(s>=o);)++s;return s},j=(r,s,o)=>r?$s.decode(ee.subarray(r,As(ee,r,s,o))):"",Ms=(r,s)=>{for(var o=0,c=r.length-1;0<=c;c--){var f=r[c];f==="."?r.splice(c,1):f===".."?(r.splice(c,1),o++):o&&(r.splice(c,1),o--)}if(s)for(;o;o--)r.unshift("..");return r},Si=r=>{var s=r.charAt(0)==="/",o=r.slice(-1)==="/";return(r=Ms(r.split("/").filter(c=>!!c),!s).join("/"))||s||(r="."),r&&o&&(r+="/"),(s?"/":"")+r},zs=r=>{var s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1);return r=s[0],s=s[1],!r&&!s?".":(s&&(s=s.slice(0,-1)),r+s)},Dr=r=>r&&r.match(/([^\/]+|\/)\/*$/)[1],Bo=()=>r=>crypto.getRandomValues(r),Us=r=>{(Us=Bo())(r)},Ro=(...r)=>{for(var s="",o=!1,c=r.length-1;-1<=c&&!o;c--){if(o=0<=c?r[c]:"/",typeof o!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";s=o+"/"+s,o=o.charAt(0)==="/"}return s=Ms(s.split("/").filter(f=>!!f),!o).join("/"),(o?"/":"")+s||"."},Nr=r=>{var s=As(r,0);return $s.decode(r.buffer?r.subarray(0,s):new Uint8Array(r.slice(0,s)))},xi=[],Ft=r=>{for(var s=0,o=0;o<r.length;++o){var c=r.charCodeAt(o);127>=c?s++:2047>=c?s+=2:55296<=c&&57343>=c?(s+=4,++o):s+=3}return s},Ie=(r,s,o,c)=>{if(!(0<c))return 0;var f=o;c=o+c-1;for(var g=0;g<r.length;++g){var E=r.codePointAt(g);if(127>=E){if(o>=c)break;s[o++]=E}else if(2047>=E){if(o+1>=c)break;s[o++]=192|E>>6,s[o++]=128|E&63}else if(65535>=E){if(o+2>=c)break;s[o++]=224|E>>12,s[o++]=128|E>>6&63,s[o++]=128|E&63}else{if(o+3>=c)break;s[o++]=240|E>>18,s[o++]=128|E>>12&63,s[o++]=128|E>>6&63,s[o++]=128|E&63,g++}}return s[o]=0,o-f},Ws=[];function Fs(r,s){Ws[r]={input:[],output:[],kb:s},Di(r,Oo)}var Oo={open(r){var s=Ws[r.node.nb];if(!s)throw new x(43);r.Va=s,r.seekable=!1},close(r){r.Va.kb.lb(r.Va)},lb(r){r.Va.kb.lb(r.Va)},read(r,s,o,c){if(!r.Va||!r.Va.kb.Qb)throw new x(60);for(var f=0,g=0;g<c;g++){try{var E=r.Va.kb.Qb(r.Va)}catch{throw new x(29)}if(E===void 0&&f===0)throw new x(6);if(E==null)break;f++,s[o+g]=E}return f&&(r.node.$a=Date.now()),f},write(r,s,o,c){if(!r.Va||!r.Va.kb.Hb)throw new x(60);try{for(var f=0;f<c;f++)r.Va.kb.Hb(r.Va,s[o+f])}catch{throw new x(29)}return c&&(r.node.Ua=r.node.Ta=Date.now()),f}},$o={Qb(){var o;e:{if(!xi.length){var r=null;if((o=globalThis.window)!=null&&o.prompt&&(r=window.prompt("Input: "),r!==null&&(r+=`
|
|
16
|
-
`)),!r){var s=null;break e}s=Array(Ft(r)+1),r=Ie(r,s,0,s.length),s.length=r,xi=s}s=xi.shift()}return s},Hb(r,s){s===null||s===10?(Wt(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(Wt(Nr(r.output)),r.output=[])},Dc(){return{yc:25856,Ac:5,xc:191,zc:35387,wc:[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]}},Ec(){return 0},Fc(){return[24,80]}},Ao={Hb(r,s){s===null||s===10?(U(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(U(Nr(r.output)),r.output=[])}},N={Za:null,ab(){return N.createNode(null,"/",16895,0)},createNode(r,s,o,c){if((o&61440)===24576||(o&61440)===4096)throw new x(63);return N.Za||(N.Za={dir:{node:{Wa:N.La.Wa,Xa:N.La.Xa,mb:N.La.mb,rb:N.La.rb,Tb:N.La.Tb,xb:N.La.xb,vb:N.La.vb,Ib:N.La.Ib,wb:N.La.wb},stream:{Ya:N.Ma.Ya}},file:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:{Ya:N.Ma.Ya,read:N.Ma.read,write:N.Ma.write,sb:N.Ma.sb,tb:N.Ma.tb}},link:{node:{Wa:N.La.Wa,Xa:N.La.Xa,eb:N.La.eb},stream:{}},Nb:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:Fo}}),o=Ks(r,s,o,c),ie(o.mode)?(o.La=N.Za.dir.node,o.Ma=N.Za.dir.stream,o.Na={}):(o.mode&61440)===32768?(o.La=N.Za.file.node,o.Ma=N.Za.file.stream,o.Ra=0,o.Na=null):(o.mode&61440)===40960?(o.La=N.Za.link.node,o.Ma=N.Za.link.stream):(o.mode&61440)===8192&&(o.La=N.Za.Nb.node,o.Ma=N.Za.Nb.stream),o.$a=o.Ua=o.Ta=Date.now(),r&&(r.Na[s]=o,r.$a=r.Ua=r.Ta=o.$a),o},Cc(r){return r.Na?r.Na.subarray?r.Na.subarray(0,r.Ra):new Uint8Array(r.Na):new Uint8Array(0)},La:{Wa(r){var s={};return s.cc=(r.mode&61440)===8192?r.id:1,s.oc=r.id,s.mode=r.mode,s.rc=1,s.uid=0,s.nc=0,s.nb=r.nb,ie(r.mode)?s.size=4096:(r.mode&61440)===32768?s.size=r.Ra:(r.mode&61440)===40960?s.size=r.link.length:s.size=0,s.$a=new Date(r.$a),s.Ua=new Date(r.Ua),s.Ta=new Date(r.Ta),s.Zb=4096,s.$b=Math.ceil(s.size/s.Zb),s},Xa(r,s){for(var o of["mode","atime","mtime","ctime"])s[o]!=null&&(r[o]=s[o]);s.size!==void 0&&(s=s.size,r.Ra!=s&&(s==0?(r.Na=null,r.Ra=0):(o=r.Na,r.Na=new Uint8Array(s),o&&r.Na.set(o.subarray(0,Math.min(s,r.Ra))),r.Ra=s)))},mb(){throw N.zb||(N.zb=new x(44),N.zb.stack="<generic error, no stack>"),N.zb},rb(r,s,o,c){return N.createNode(r,s,o,c)},Tb(r,s,o){try{var c=ht(s,o)}catch{}if(c){if(ie(r.mode))for(var f in c.Na)throw new x(55);Ti(c)}delete r.parent.Na[r.name],s.Na[o]=r,r.name=o,s.Ta=s.Ua=r.parent.Ta=r.parent.Ua=Date.now()},xb(r,s){delete r.Na[s],r.Ta=r.Ua=Date.now()},vb(r,s){var o=ht(r,s),c;for(c in o.Na)throw new x(55);delete r.Na[s],r.Ta=r.Ua=Date.now()},Ib(r){return[".","..",...Object.keys(r.Na)]},wb(r,s,o){return r=N.createNode(r,s,41471,0),r.link=o,r},eb(r){if((r.mode&61440)!==40960)throw new x(28);return r.link}},Ma:{read(r,s,o,c,f){var g=r.node.Na;if(f>=r.node.Ra)return 0;if(r=Math.min(r.node.Ra-f,c),8<r&&g.subarray)s.set(g.subarray(f,f+r),o);else for(c=0;c<r;c++)s[o+c]=g[f+c];return r},write(r,s,o,c,f,g){if(s.buffer===Q.buffer&&(g=!1),!c)return 0;if(r=r.node,r.Ua=r.Ta=Date.now(),s.subarray&&(!r.Na||r.Na.subarray)){if(g)return r.Na=s.subarray(o,o+c),r.Ra=c;if(r.Ra===0&&f===0)return r.Na=s.slice(o,o+c),r.Ra=c;if(f+c<=r.Ra)return r.Na.set(s.subarray(o,o+c),f),c}g=f+c;var E=r.Na?r.Na.length:0;if(E>=g||(g=Math.max(g,E*(1048576>E?2:1.125)>>>0),E!=0&&(g=Math.max(g,256)),E=r.Na,r.Na=new Uint8Array(g),0<r.Ra&&r.Na.set(E.subarray(0,r.Ra),0)),r.Na.subarray&&s.subarray)r.Na.set(s.subarray(o,o+c),f);else for(g=0;g<c;g++)r.Na[f+g]=s[o+g];return r.Ra=Math.max(r.Ra,f+c),c},Ya(r,s,o){if(o===1?s+=r.position:o===2&&(r.node.mode&61440)===32768&&(s+=r.node.Ra),0>s)throw new x(28);return s},sb(r,s,o,c,f){if((r.node.mode&61440)!==32768)throw new x(43);if(r=r.node.Na,f&2||!r||r.buffer!==Q.buffer){f=!0,c=65536*Math.ceil(s/65536);var g=ha(65536,c);if(g&&ee.fill(0,g,g+c),c=g,!c)throw new x(48);r&&((0<o||o+s<r.length)&&(r.subarray?r=r.subarray(o,o+s):r=Array.prototype.slice.call(r,o,o+s)),Q.set(r,c))}else f=!1,c=r.byteOffset;return{tc:c,Ub:f}},tb(r,s,o,c){return N.Ma.write(r,s,0,c,o,!1),0}}},Vs=(r,s)=>{var o=0;return r&&(o|=365),s&&(o|=146),o},ki=null,js={},Vt=[],Mo=1,Ve=null,Qs=!1,Hs=!0,x=class{constructor(r){k(this,"name","ErrnoError");this.Pa=r}},zo=class{constructor(){k(this,"qb",{});k(this,"node",null)}get flags(){return this.qb.flags}set flags(r){this.qb.flags=r}get position(){return this.qb.position}set position(r){this.qb.position=r}},Uo=class{constructor(r,s,o,c){k(this,"La",{});k(this,"Ma",{});k(this,"ib",null);r||(r=this),this.parent=r,this.ab=r.ab,this.id=Mo++,this.name=s,this.mode=o,this.nb=c,this.$a=this.Ua=this.Ta=Date.now()}get read(){return(this.mode&365)===365}set read(r){r?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(r){r?this.mode|=146:this.mode&=-147}};function de(r,s={}){if(!r)throw new x(44);s.Bb??(s.Bb=!0),r.charAt(0)==="/"||(r="//"+r);var o=0;e:for(;40>o;o++){r=r.split("/").filter(I=>!!I);for(var c=ki,f="/",g=0;g<r.length;g++){var E=g===r.length-1;if(E&&s.parent)break;if(r[g]!==".")if(r[g]==="..")if(f=zs(f),c===c.parent){r=f+"/"+r.slice(g+1).join("/"),o--;continue e}else c=c.parent;else{f=Si(f+"/"+r[g]);try{c=ht(c,r[g])}catch(I){if((I==null?void 0:I.Pa)===44&&E&&s.sc)return{path:f};throw I}if(!c.ib||E&&!s.Bb||(c=c.ib.root),(c.mode&61440)===40960&&(!E||s.hb)){if(!c.La.eb)throw new x(52);c=c.La.eb(c),c.charAt(0)==="/"||(c=zs(f)+"/"+c),r=c+"/"+r.slice(g+1).join("/");continue e}}}return{path:f,node:c}}throw new x(32)}function Li(r){for(var s;;){if(r===r.parent)return r=r.ab.Sb,s?r[r.length-1]!=="/"?`${r}/${s}`:r+s:r;s=s?`${r.name}/${s}`:r.name,r=r.parent}}function _i(r,s){for(var o=0,c=0;c<s.length;c++)o=(o<<5)-o+s.charCodeAt(c)|0;return(r+o>>>0)%Ve.length}function Ti(r){var s=_i(r.parent.id,r.name);if(Ve[s]===r)Ve[s]=r.jb;else for(s=Ve[s];s;){if(s.jb===r){s.jb=r.jb;break}s=s.jb}}function ht(r,s){var o=ie(r.mode)?(o=jt(r,"x"))?o:r.La.mb?0:2:54;if(o)throw new x(o);for(o=Ve[_i(r.id,s)];o;o=o.jb){var c=o.name;if(o.parent.id===r.id&&c===s)return o}return r.La.mb(r,s)}function Ks(r,s,o,c){return r=new Uo(r,s,o,c),s=_i(r.parent.id,r.name),r.jb=Ve[s],Ve[s]=r}function ie(r){return(r&61440)===16384}function jt(r,s){return Hs?0:s.includes("r")&&!(r.mode&292)||s.includes("w")&&!(r.mode&146)||s.includes("x")&&!(r.mode&73)?2:0}function Ys(r,s){if(!ie(r.mode))return 54;try{return ht(r,s),20}catch{}return jt(r,"wx")}function Gs(r,s,o){try{var c=ht(r,s)}catch(f){return f.Pa}if(r=jt(r,"wx"))return r;if(o){if(!ie(c.mode))return 54;if(c===c.parent||Li(c)==="/")return 10}else if(ie(c.mode))return 31;return 0}function Pr(r){if(!r)throw new x(63);return r}function te(r){if(r=Vt[r],!r)throw new x(8);return r}function Js(r,s=-1){if(r=Object.assign(new zo,r),s==-1)e:{for(s=0;4096>=s;s++)if(!Vt[s])break e;throw new x(33)}return r.bb=s,Vt[s]=r}function Wo(r,s=-1){var o,c;return r=Js(r,s),(c=(o=r.Ma)==null?void 0:o.Bc)==null||c.call(o,r),r}function Ii(r,s,o){var c=r==null?void 0:r.Ma.Xa;r=c?r:s,c??(c=s.La.Xa),Pr(c),c(r,o)}var Fo={open(r){var s,o;r.Ma=js[r.node.nb].Ma,(o=(s=r.Ma).open)==null||o.call(s,r)},Ya(){throw new x(70)}};function Di(r,s){js[r]={Ma:s}}function Xs(r,s){var o=s==="/";if(o&&ki)throw new x(10);if(!o&&s){var c=de(s,{Bb:!1});if(s=c.path,c=c.node,c.ib)throw new x(10);if(!ie(c.mode))throw new x(54)}s={type:r,Gc:{},Sb:s,qc:[]},r=r.ab(s),r.ab=s,s.root=r,o?ki=r:c&&(c.ib=s,c.ab&&c.ab.qc.push(s))}function qr(r,s,o){var c=de(r,{parent:!0}).node;if(r=Dr(r),!r)throw new x(28);if(r==="."||r==="..")throw new x(20);var f=Ys(c,r);if(f)throw new x(f);if(!c.La.rb)throw new x(63);return c.La.rb(c,r,s,o)}function Vo(r,s=438){return qr(r,s&4095|32768,0)}function De(r,s=511){return qr(r,s&1023|16384,0)}function Cr(r,s,o){typeof o>"u"&&(o=s,s=438),qr(r,s|8192,o)}function Ni(r,s){if(!Ro(r))throw new x(44);var o=de(s,{parent:!0}).node;if(!o)throw new x(44);s=Dr(s);var c=Ys(o,s);if(c)throw new x(c);if(!o.La.wb)throw new x(63);o.La.wb(o,s,r)}function Zs(r){var s=de(r,{parent:!0}).node;r=Dr(r);var o=ht(s,r),c=Gs(s,r,!0);if(c)throw new x(c);if(!s.La.vb)throw new x(63);if(o.ib)throw new x(10);s.La.vb(s,r),Ti(o)}function ea(r){var s=de(r,{parent:!0}).node;if(!s)throw new x(44);r=Dr(r);var o=ht(s,r),c=Gs(s,r,!1);if(c)throw new x(c);if(!s.La.xb)throw new x(63);if(o.ib)throw new x(10);s.La.xb(s,r),Ti(o)}function xn(r,s){return r=de(r,{hb:!s}).node,Pr(r.La.Wa)(r)}function ta(r,s,o,c){Ii(r,s,{mode:o&4095|s.mode&-4096,Ta:Date.now(),dc:c})}function Br(r,s){r=typeof r=="string"?de(r,{hb:!0}).node:r,ta(null,r,s)}function na(r,s,o){if(ie(s.mode))throw new x(31);if((s.mode&61440)!==32768)throw new x(28);var c=jt(s,"w");if(c)throw new x(c);Ii(r,s,{size:o,timestamp:Date.now()})}function Qt(r,s,o=438){if(r==="")throw new x(44);if(typeof s=="string"){var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[s];if(typeof c>"u")throw Error(`Unknown file open mode: ${s}`);s=c}if(o=s&64?o&4095|32768:0,typeof r=="object")c=r;else{var f=r.endsWith("/"),g=de(r,{hb:!(s&131072),sc:!0});c=g.node,r=g.path}if(g=!1,s&64)if(c){if(s&128)throw new x(20)}else{if(f)throw new x(31);c=qr(r,o|511,0),g=!0}if(!c)throw new x(44);if((c.mode&61440)===8192&&(s&=-513),s&65536&&!ie(c.mode))throw new x(54);if(!g&&(c?(c.mode&61440)===40960?f=32:(f=["r","w","rw"][s&3],s&512&&(f+="w"),f=ie(c.mode)&&(f!=="r"||s&576)?31:jt(c,f)):f=44,f))throw new x(f);return s&512&&!g&&(f=c,f=typeof f=="string"?de(f,{hb:!0}).node:f,na(null,f,0)),s=Js({node:c,path:Li(c),flags:s&-131713,seekable:!0,position:0,Ma:c.Ma,uc:[],error:!1}),s.Ma.open&&s.Ma.open(s),g&&Br(c,o&511),s}function Pi(r){if(r.bb===null)throw new x(8);r.Eb&&(r.Eb=null);try{r.Ma.close&&r.Ma.close(r)}catch(s){throw s}finally{Vt[r.bb]=null}r.bb=null}function ra(r,s,o){if(r.bb===null)throw new x(8);if(!r.seekable||!r.Ma.Ya)throw new x(70);if(o!=0&&o!=1&&o!=2)throw new x(28);r.position=r.Ma.Ya(r,s,o),r.uc=[]}function ia(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===1)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.read)throw new x(28);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.read(r,s,o,c,f),g||(r.position+=s),s}function sa(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===0)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.write)throw new x(28);r.seekable&&r.flags&1024&&ra(r,0,2);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.write(r,s,o,c,f,void 0),g||(r.position+=s),s}function jo(r){var s=s||0;s=Qt(r,s),r=xn(r).size;var o=new Uint8Array(r);return ia(s,o,0,r,0),Pi(s),o}function je(r,s,o){r=Si("/dev/"+r);var c=Vs(!!s,!!o);je.Rb??(je.Rb=64);var f=je.Rb++<<8|0;Di(f,{open(g){g.seekable=!1},close(){var g;(g=o==null?void 0:o.buffer)!=null&&g.length&&o(10)},read(g,E,I,$){for(var P=0,z=0;z<$;z++){try{var G=s()}catch{throw new x(29)}if(G===void 0&&P===0)throw new x(6);if(G==null)break;P++,E[I+z]=G}return P&&(g.node.$a=Date.now()),P},write(g,E,I,$){for(var P=0;P<$;P++)try{o(E[I+P])}catch{throw new x(29)}return $&&(g.node.Ua=g.node.Ta=Date.now()),P}}),Cr(r,c,f)}var M={};function dt(r,s,o){if(s.charAt(0)==="/")return s;if(r=r===-100?"/":te(r).path,s.length==0){if(!o)throw new x(44);return r}return r+"/"+s}function Rr(r,s){A[r>>2]=s.cc,A[r+4>>2]=s.mode,A[r+8>>2]=s.rc,A[r+12>>2]=s.uid,A[r+16>>2]=s.nc,A[r+20>>2]=s.nb,ve[r+24>>3]=BigInt(s.size),F[r+32>>2]=4096,F[r+36>>2]=s.$b;var o=s.$a.getTime(),c=s.Ua.getTime(),f=s.Ta.getTime();return ve[r+40>>3]=BigInt(Math.floor(o/1e3)),A[r+48>>2]=o%1e3*1e6,ve[r+56>>3]=BigInt(Math.floor(c/1e3)),A[r+64>>2]=c%1e3*1e6,ve[r+72>>3]=BigInt(Math.floor(f/1e3)),A[r+80>>2]=f%1e3*1e6,ve[r+88>>3]=BigInt(s.oc),0}var Or=void 0,$r=()=>{var r=F[+Or>>2];return Or+=4,r},qi=0,Qo=[0,31,60,91,121,152,182,213,244,274,305,335],Ho=[0,31,59,90,120,151,181,212,243,273,304,334],kn={},aa=r=>{if(!(r instanceof Cs||r=="unwind"))throw r},oa=r=>{var s;throw mi=r,Ir||0<qi||((s=h.onExit)==null||s.call(h,r),Tr=!0),new Cs(r)},Ko=r=>{if(!Tr)try{r()}catch(s){aa(s)}finally{if(!(Ir||0<qi))try{mi=r=mi,oa(r)}catch(s){aa(s)}}},Ci={},ca=()=>{var c;if(!Bi){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((c=globalThis.navigator)==null?void 0:c.language)??"C").replace("-","_")+".UTF-8",_:W||"./this.program"},s;for(s in Ci)Ci[s]===void 0?delete r[s]:r[s]=Ci[s];var o=[];for(s in r)o.push(`${s}=${r[s]}`);Bi=o}return Bi},Bi,Yo=(r,s,o,c)=>{var f={string:P=>{var z=0;if(P!=null&&P!==0){z=Ft(P)+1;var G=pt(z);Ie(P,ee,G,z),z=G}return z},array:P=>{var z=pt(P.length);return Q.set(P,z),z}};r=h["_"+r];var g=[],E=0;if(c)for(var I=0;I<c.length;I++){var $=f[o[I]];$?(E===0&&(E=Ur()),g[I]=$(c[I])):g[I]=c[I]}return o=r(...g),o=(function(P){return E!==0&&zr(E),s==="string"?j(P):s==="boolean"?!!P:P})(o)},Ar=r=>{var s=Ft(r)+1,o=Mr(s);return o&&Ie(r,ee,o,s),o},ft,Ri=[],Qe=r=>{ft.delete(He.get(r)),He.set(r,null),Ri.push(r)},la=r=>{const s=r.length;return[s%128|128,s>>7,...r]},Go={i:127,p:127,j:126,f:125,d:124,e:111},ua=r=>la(Array.from(r,s=>Go[s])),Ln=(r,s)=>{if(!ft){ft=new WeakMap;var o=He.length;if(ft)for(var c=0;c<0+o;c++){var f=He.get(c);f&&ft.set(f,c)}}if(o=ft.get(r)||0)return o;o=Ri.length?Ri.pop():He.grow(1);try{He.set(o,r)}catch(g){if(!(g instanceof TypeError))throw g;s=Uint8Array.of(0,97,115,109,1,0,0,0,1,...la([1,96,...ua(s.slice(1)),...ua(s[0]==="v"?"":s[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),s=new WebAssembly.Module(s),s=new WebAssembly.Instance(s,{e:{f:r}}).exports.f,He.set(o,s)}return ft.set(r,o),o};if(Ve=Array(4096),Xs(N,"/"),De("/tmp"),De("/home"),De("/home/web_user"),(function(){De("/dev"),Di(259,{read:()=>0,write:(c,f,g,E)=>E,Ya:()=>0}),Cr("/dev/null",259),Fs(1280,$o),Fs(1536,Ao),Cr("/dev/tty",1280),Cr("/dev/tty1",1536);var r=new Uint8Array(1024),s=0,o=()=>(s===0&&(Us(r),s=r.byteLength),r[--s]);je("random",o),je("urandom",o),De("/dev/shm"),De("/dev/shm/tmp")})(),(function(){De("/proc");var r=De("/proc/self");De("/proc/self/fd"),Xs({ab(){var s=Ks(r,"fd",16895,73);return s.Ma={Ya:N.Ma.Ya},s.La={mb(o,c){o=+c;var f=te(o);return o={parent:null,ab:{Sb:"fake"},La:{eb:()=>f.path},id:o+1},o.parent=o},Ib(){return Array.from(Vt.entries()).filter(([,o])=>o).map(([o])=>o.toString())}},s}},"/proc/self/fd")})(),h.noExitRuntime&&(Ir=h.noExitRuntime),h.print&&(Wt=h.print),h.printErr&&(U=h.printErr),h.wasmBinary&&(lt=h.wasmBinary),h.thisProgram&&(W=h.thisProgram),h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.shift()();h.stackSave=()=>Ur(),h.stackRestore=r=>zr(r),h.stackAlloc=r=>pt(r),h.cwrap=(r,s,o,c)=>{var f=!o||o.every(g=>g==="number"||g==="boolean");return s!=="string"&&f&&!c?h["_"+r]:(...g)=>Yo(r,s,o,g)},h.addFunction=Ln,h.removeFunction=Qe,h.UTF8ToString=j,h.stringToNewUTF8=Ar,h.writeArrayToMemory=(r,s)=>{Q.set(r,s)};var Mr,_n,ha,da,zr,pt,Ur,Wr,He,Jo={a:(r,s,o,c)=>vn(`Assertion failed: ${j(r)}, at: `+[s?j(s):"unknown filename",o,c?j(c):"unknown function"]),i:function(r,s){try{return r=j(r),Br(r,s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},L:function(r,s,o){try{if(s=j(s),s=dt(r,s),o&-8)return-28;var c=de(s,{hb:!0}).node;return c?(r="",o&4&&(r+="r"),o&2&&(r+="w"),o&1&&(r+="x"),r&&jt(c,r)?-2:0):-44}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},j:function(r,s){try{var o=te(r);return ta(o,o.node,s,!1),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},h:function(r){try{var s=te(r);return Ii(s,s.node,{timestamp:Date.now(),dc:!1}),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},b:function(r,s,o){Or=o;try{var c=te(r);switch(s){case 0:var f=$r();if(0>f)break;for(;Vt[f];)f++;return Wo(c,f).bb;case 1:case 2:return 0;case 3:return c.flags;case 4:return f=$r(),c.flags|=f,0;case 12:return f=$r(),bn[f+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},g:function(r,s){try{var o=te(r),c=o.node,f=o.Ma.Wa;r=f?o:c,f??(f=c.La.Wa),Pr(f);var g=f(r);return Rr(s,g)}catch(E){if(typeof M>"u"||E.name!=="ErrnoError")throw E;return-E.Pa}},H:function(r,s){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return-61;var o=te(r);if(0>s||(o.flags&2097155)===0)throw new x(28);return na(o,o.node,s),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},G:function(r,s){try{if(s===0)return-28;var o=Ft("/")+1;return s<o?-68:(Ie("/",ee,r,s),o)}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},K:function(r,s){try{return r=j(r),Rr(s,xn(r,!0))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},C:function(r,s,o){try{return s=j(s),s=dt(r,s),De(s,o),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},J:function(r,s,o,c){try{s=j(s);var f=c&256;return s=dt(r,s,c&4096),Rr(o,f?xn(s,!0):xn(s))}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},x:function(r,s,o,c){Or=c;try{s=j(s),s=dt(r,s);var f=c?$r():0;return Qt(s,o,f).bb}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},v:function(r,s,o,c){try{if(s=j(s),s=dt(r,s),0>=c)return-28;var f=de(s).node;if(!f)throw new x(44);if(!f.La.eb)throw new x(28);var g=f.La.eb(f),E=Math.min(c,Ft(g)),I=Q[o+E];return Ie(g,ee,o,c+1),Q[o+E]=I,E}catch($){if(typeof M>"u"||$.name!=="ErrnoError")throw $;return-$.Pa}},u:function(r){try{return r=j(r),Zs(r),0}catch(s){if(typeof M>"u"||s.name!=="ErrnoError")throw s;return-s.Pa}},f:function(r,s){try{return r=j(r),Rr(s,xn(r))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},r:function(r,s,o){try{if(s=j(s),s=dt(r,s),o)if(o===512)Zs(s);else return-28;else ea(s);return 0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},q:function(r,s,o){try{s=j(s),s=dt(r,s,!0);var c=Date.now(),f,g;if(o){var E=A[o>>2]+4294967296*F[o+4>>2],I=F[o+8>>2];I==1073741823?f=c:I==1073741822?f=null:f=1e3*E+I/1e6,o+=16,E=A[o>>2]+4294967296*F[o+4>>2],I=F[o+8>>2],I==1073741823?g=c:I==1073741822?g=null:g=1e3*E+I/1e6}else g=f=c;if((g??f)!==null){r=f;var $=de(s,{hb:!0}).node;Pr($.La.Xa)($,{$a:r,Ua:g})}return 0}catch(P){if(typeof M>"u"||P.name!=="ErrnoError")throw P;return-P.Pa}},m:()=>vn(""),l:()=>{Ir=!1,qi=0},A:function(r,s){r=-9007199254740992>r||9007199254740992<r?NaN:Number(r),r=new Date(1e3*r),F[s>>2]=r.getSeconds(),F[s+4>>2]=r.getMinutes(),F[s+8>>2]=r.getHours(),F[s+12>>2]=r.getDate(),F[s+16>>2]=r.getMonth(),F[s+20>>2]=r.getFullYear()-1900,F[s+24>>2]=r.getDay();var o=r.getFullYear();F[s+28>>2]=(o%4!==0||o%100===0&&o%400!==0?Ho:Qo)[r.getMonth()]+r.getDate()-1|0,F[s+36>>2]=-(60*r.getTimezoneOffset()),o=new Date(r.getFullYear(),6,1).getTimezoneOffset();var c=new Date(r.getFullYear(),0,1).getTimezoneOffset();F[s+32>>2]=(o!=c&&r.getTimezoneOffset()==Math.min(c,o))|0},y:function(r,s,o,c,f,g,E){f=-9007199254740992>f||9007199254740992<f?NaN:Number(f);try{var I=te(c);if((s&2)!==0&&(o&2)===0&&(I.flags&2097155)!==2)throw new x(2);if((I.flags&2097155)===1)throw new x(2);if(!I.Ma.sb)throw new x(43);if(!r)throw new x(28);var $=I.Ma.sb(I,r,f,s,o),P=$.tc;return F[g>>2]=$.Ub,A[E>>2]=P,0}catch(z){if(typeof M>"u"||z.name!=="ErrnoError")throw z;return-z.Pa}},z:function(r,s,o,c,f,g){g=-9007199254740992>g||9007199254740992<g?NaN:Number(g);try{var E=te(f);if(o&2){if((E.node.mode&61440)!==32768)throw new x(43);c&2||E.Ma.tb&&E.Ma.tb(E,ee.slice(r,r+s),g,s,c)}}catch(I){if(typeof M>"u"||I.name!=="ErrnoError")throw I;return-I.Pa}},n:(r,s)=>{if(kn[r]&&(clearTimeout(kn[r].id),delete kn[r]),!s)return 0;var o=setTimeout(()=>{delete kn[r],Ko(()=>da(r,performance.now()))},s);return kn[r]={id:o,Hc:s},0},B:(r,s,o,c)=>{var f=new Date().getFullYear(),g=new Date(f,0,1).getTimezoneOffset();f=new Date(f,6,1).getTimezoneOffset(),A[r>>2]=60*Math.max(g,f),F[s>>2]=+(g!=f),s=E=>{var I=Math.abs(E);return`UTC${0<=E?"-":"+"}${String(Math.floor(I/60)).padStart(2,"0")}${String(I%60).padStart(2,"0")}`},r=s(g),s=s(f),f<g?(Ie(r,ee,o,17),Ie(s,ee,c,17)):(Ie(r,ee,c,17),Ie(s,ee,o,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:r=>{var s=ee.length;if(r>>>=0,2147483648<r)return!1;for(var o=1;4>=o;o*=2){var c=s*(1+.2/o);c=Math.min(c,r+100663296);e:{c=(Math.min(2147483648,65536*Math.ceil(Math.max(r,c)/65536))-Wr.buffer.byteLength+65535)/65536|0;try{Wr.grow(c),qs();var f=1;break e}catch{}f=void 0}if(f)return!0}return!1},E:(r,s)=>{var o=0,c=0,f;for(f of ca()){var g=s+o;A[r+c>>2]=g,o+=Ie(f,ee,g,1/0)+1,c+=4}return 0},F:(r,s)=>{var o=ca();A[r>>2]=o.length,r=0;for(var c of o)r+=Ft(c)+1;return A[s>>2]=r,0},e:function(r){try{var s=te(r);return Pi(s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return o.Pa}},p:function(r,s){try{var o=te(r);return Q[s]=o.Va?2:ie(o.mode)?3:(o.mode&61440)===40960?7:4,bn[s+2>>1]=0,ve[s+8>>3]=BigInt(0),ve[s+16>>3]=BigInt(0),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return c.Pa}},w:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=ia(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},D:function(r,s,o,c){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return 61;var f=te(r);return ra(f,s,o),ve[c>>3]=BigInt(f.position),f.Eb&&s===0&&o===0&&(f.Eb=null),0}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},I:function(r){var o,c;try{var s=te(r);return(c=(o=s.Ma)==null?void 0:o.lb)==null?void 0:c.call(o,s)}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},t:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=sa(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},k:oa};function Oi(){function r(){var f;if(h.calledRun=!0,!Tr){if(!h.noFSInit&&!Qs){var s,o;Qs=!0,s??(s=h.stdin),o??(o=h.stdout),c??(c=h.stderr),s?je("stdin",s):Ni("/dev/tty","/dev/stdin"),o?je("stdout",null,o):Ni("/dev/tty","/dev/stdout"),c?je("stderr",null,c):Ni("/dev/tty1","/dev/stderr"),Qt("/dev/stdin",0),Qt("/dev/stdout",1),Qt("/dev/stderr",1)}if($i.N(),Hs=!1,(f=h.onRuntimeInitialized)==null||f.call(h),h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var c=h.postRun.shift();Rs.push(c)}Bs(Rs)}}if(0<ut)En=Oi;else{if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)Co();Bs(Os),0<ut?En=Oi:h.setStatus?(h.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>h.setStatus(""),1),r()},1)):r()}}var $i;return(async function(){var o;function r(c){var f;return c=$i=c.exports,h._sqlite3_free=c.P,h._sqlite3_value_text=c.Q,h._sqlite3_prepare_v2=c.R,h._sqlite3_step=c.S,h._sqlite3_reset=c.T,h._sqlite3_exec=c.U,h._sqlite3_finalize=c.V,h._sqlite3_column_name=c.W,h._sqlite3_column_text=c.X,h._sqlite3_column_type=c.Y,h._sqlite3_errmsg=c.Z,h._sqlite3_clear_bindings=c._,h._sqlite3_value_blob=c.$,h._sqlite3_value_bytes=c.aa,h._sqlite3_value_double=c.ba,h._sqlite3_value_int=c.ca,h._sqlite3_value_type=c.da,h._sqlite3_result_blob=c.ea,h._sqlite3_result_double=c.fa,h._sqlite3_result_error=c.ga,h._sqlite3_result_int=c.ha,h._sqlite3_result_int64=c.ia,h._sqlite3_result_null=c.ja,h._sqlite3_result_text=c.ka,h._sqlite3_aggregate_context=c.la,h._sqlite3_column_count=c.ma,h._sqlite3_data_count=c.na,h._sqlite3_column_blob=c.oa,h._sqlite3_column_bytes=c.pa,h._sqlite3_column_double=c.qa,h._sqlite3_bind_blob=c.ra,h._sqlite3_bind_double=c.sa,h._sqlite3_bind_int=c.ta,h._sqlite3_bind_text=c.ua,h._sqlite3_bind_parameter_index=c.va,h._sqlite3_sql=c.wa,h._sqlite3_normalized_sql=c.xa,h._sqlite3_changes=c.ya,h._sqlite3_close_v2=c.za,h._sqlite3_create_function_v2=c.Aa,h._sqlite3_update_hook=c.Ba,h._sqlite3_open=c.Ca,Mr=h._malloc=c.Da,_n=h._free=c.Ea,h._RegisterExtensionFunctions=c.Fa,ha=c.Ga,da=c.Ha,zr=c.Ia,pt=c.Ja,Ur=c.Ka,Wr=c.M,He=c.O,qs(),ut--,(f=h.monitorRunDependencies)==null||f.call(h,ut),ut==0&&En&&(c=En,En=null,c()),$i}ut++,(o=h.monitorRunDependencies)==null||o.call(h,ut);var s={a:Jo};return h.instantiateWasm?new Promise(c=>{h.instantiateWasm(s,(f,g)=>{c(r(f))})}):(Ei??(Ei=h.locateFile?h.locateFile("sql-wasm-browser.wasm",Fe):Fe+"sql-wasm-browser.wasm"),r((await qo(s)).instance))})(),Oi(),y}),t)};n.exports=i,n.exports.default=i})(Fi)),Fi.exports}var $u=Ou();const Au=Ru($u),Mu=""+new URL("sql-wasm-UFUCzYNW.wasm",import.meta.url).href;let Vi=null;async function zu(){return Vi||(Vi=await Au({locateFile:()=>Mu})),Vi}class Uu{constructor(){this.db=null,this.fileName=""}async open(e,t){const i=await zu();this.db&&this.db.close(),this.db=new i.Database(new Uint8Array(e)),this.fileName=t}close(){this.db&&(this.db.close(),this.db=null,this.fileName="")}isOpen(){return!!this.db}_ensureOpen(){if(!this.db)throw new Error("No local database open.")}_runQuery(e){this._ensureOpen();const t=this.db.exec(e);if(!t.length)return{columns:[],rows:[]};const{columns:i,values:a}=t[0],l=a.map(d=>{const y={};return i.forEach((v,h)=>y[v]=d[h]),y});return{columns:i,rows:l}}async getTables(){const{rows:e}=this._runQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;");return e.map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){const{rows:t}=this._runQuery(`PRAGMA table_info(\`${e}\`);`);return t}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const{rows:l}=this._runQuery(`SELECT * FROM \`${e}\` LIMIT ${t} OFFSET ${i};`),d=this._runQuery(`SELECT COUNT(*) as count FROM \`${e}\`;`),y=d.rows.length?Number(d.rows[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){this._ensureOpen();const i=e.trim(),a=i.toUpperCase();if(["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(v=>a.startsWith(v))){this.db.run(i);const v=this.db.getRowsModified();return{columns:[],rows:[],row_count:v}}let l=i;t&&!a.includes("LIMIT")&&a.startsWith("SELECT")&&(l=`${i.replace(/;$/,"")} LIMIT ${t};`);const{columns:d,rows:y}=this._runQuery(l);return{columns:d,rows:y,row_count:y.length}}async checkDatabaseExists(){return this.isOpen()}}const D=new Bu,it=new Uu;let me=null,ne=0,J=100,ue=0,Lo="query",Ua=null,Ye=[],X="",_r="device",yi=!1;function yn(){return _r==="local"?it:D}const w=n=>document.getElementById(n);window.addEventListener("DOMContentLoaded",()=>{const n=localStorage.getItem("sqliteViewerQuery");n&&(w("queryInput").value=n),localStorage.getItem("sqliteViewerConfigCollapsed")==="true"&&w("configSection").classList.remove("expanded"),w("queryInput").addEventListener("input",e=>{localStorage.setItem("sqliteViewerQuery",e.target.value)}),document.addEventListener("keydown",e=>{e.key==="F5"&&(e.preventDefault(),Wa())}),w("tableSearch").addEventListener("input",e=>th(e.target.value)),document.addEventListener("click",e=>{!e.target.closest("#searchResultsDropdown")&&!e.target.closest("#dbSearchInput")&&w("searchResultsDropdown").classList.remove("visible"),!e.target.closest("#packageDropdown")&&!e.target.closest("#packageSearchInput")&&w("packageDropdown").classList.remove("visible")}),w("configToggleBtn").addEventListener("click",Ku),w("usbConnectBtn").addEventListener("click",Hu),w("packageSearchInput").addEventListener("focus",Yu),w("packageSearchInput").addEventListener("input",xs),w("packageClearBtn").addEventListener("click",e=>Ju(e)),w("databaseSelect").addEventListener("change",()=>ks()),w("dbSearchInput").addEventListener("input",Zu),w("dbSearchInput").addEventListener("keydown",e=>{e.key==="Enter"&&ps()}),w("dbSearchBtn").addEventListener("click",ps),w("executeBtn").addEventListener("click",()=>Wa()),w("executeAllBtn").addEventListener("click",ah),w("refreshTablesBtn").addEventListener("click",ph),w("clearQueryBtn").addEventListener("click",wh),w("formatQueryBtn").addEventListener("click",gh),w("downloadDbBtn").addEventListener("click",yh),w("openLocalBtn").addEventListener("click",()=>w("localFileInput").click()),w("localFileInput").addEventListener("change",mh),w("closeLocalBtn").addEventListener("click",bh),w("dismissUpdate").addEventListener("click",()=>w("updateBar").classList.remove("visible")),w("firstBtn").addEventListener("click",ch),w("prevBtn").addEventListener("click",lh),w("nextBtn").addEventListener("click",uh),w("lastBtn").addEventListener("click",hh),w("gotoPageBtn").addEventListener("click",Fa),w("gotoPageInput").addEventListener("keypress",e=>{e.key==="Enter"&&Fa()}),w("limitSelect").addEventListener("change",dh),document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",()=>fh(e.dataset.tab))}),Wu(),Eh()});async function Wu(){try{if(await D.connectBridge()){Fu(),await Vu();return}}catch{}await Qu()}function Fu(){const n=w("connectionStatus");n.textContent="ADB Bridge",n.className="connection-status bridge";const e=D.bridgeUrl?new URL(D.bridgeUrl).port:"15555";w("deviceStatus").textContent=`Bridge connected on :${e}`,w("deviceStatus").classList.add("ok");const t=w("usbConnectBtn");t.textContent="Disconnect Bridge",t.classList.add("disconnect")}async function Vu(){try{const n=await D.getDevices();if(n.length===0){w("deviceStatus").textContent="Bridge connected — no devices found. Plug in a phone.",w("deviceStatus").classList.remove("ok");return}const e=n[0];D.bridgeSerial=e.serial,w("deviceStatus").textContent=e.display_name,w("deviceStatus").classList.add("ok"),e.display_name&&e.display_name.toLowerCase().includes("waydroid")&&await ju(),await _o()}catch(n){w("deviceStatus").textContent=`Bridge error: ${n.message}`,w("deviceStatus").classList.remove("ok")}}async function ju(){try{(await(await fetch(`${D.bridgeUrl}/api/waydroid/detect`)).json()).detected&&(yi=!0,w("deviceStatus").textContent+=" (WayDroid host access)")}catch{}}async function Qu(){try{const n=await D.getDevices(),e=localStorage.getItem("sqliteViewerDevice");n.length===1?(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(n[0].serial),await fs()):e&&n.find(i=>i.serial===e)&&(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(e),await fs())}catch{}}async function Hu(){const n=w("usbConnectBtn");if(D.mode==="bridge"||D.adb){await D.disconnect(),n.textContent="Connect Device",n.classList.remove("disconnect"),w("deviceStatus").textContent="No device connected",w("deviceStatus").classList.remove("ok"),w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>';return}n.textContent="Connecting...",w("deviceStatus").textContent="Check your phone — approve USB debugging if prompted";try{await D.requestDevice(),await fs()}catch(e){n.textContent="Connect Device",w("deviceStatus").textContent=`Error: ${e.message}`,w("deviceStatus").classList.remove("ok")}}async function fs(){const n=D.getDeviceInfo(),e=w("usbConnectBtn");e.textContent="Disconnect",e.classList.add("disconnect"),w("deviceStatus").textContent=n.display_name,w("deviceStatus").classList.add("ok"),w("connectionStatus").textContent="Connected",w("connectionStatus").className="connection-status connected",localStorage.setItem("sqliteViewerDevice",n.serial),await _o()}function Ku(){const n=w("configSection");n.classList.toggle("expanded"),localStorage.setItem("sqliteViewerConfigCollapsed",!n.classList.contains("expanded"))}async function _o(){const n=w("packageSearchInput"),e=w("packageComboWrapper");n.disabled=!1,n.placeholder="Scanning debuggable apps...",n.value="",e.classList.remove("has-value"),X="",Ye=[];try{yi?Ye=(await(await fetch(`${D.bridgeUrl}/api/waydroid/packages`)).json()).packages||[]:Ye=await D.getPackages(),n.placeholder=`Search ${Ye.length} apps...`;const t=localStorage.getItem("sqliteViewerPackage");t&&Ye.includes(t)&&(X=t,n.value=t,e.classList.add("has-value")),await To(!0)}catch(t){n.placeholder=`Failed: ${t.message}`}}function Yu(){const n=w("packageSearchInput");X&&n.value===X&&n.select(),xs()}function xs(){const n=w("packageSearchInput"),e=w("packageDropdown"),t=n.value.trim().toLowerCase(),i=t?Ye.filter(a=>a.toLowerCase().includes(t)):Ye;i.length===0?e.innerHTML='<div class="combo-empty">No matching packages</div>':(e.innerHTML=i.map(a=>`<div class="combo-item${a===X?" active":""}" data-pkg="${a}">${a}</div>`).join(""),e.querySelectorAll(".combo-item").forEach(a=>{a.addEventListener("click",()=>Gu(a.dataset.pkg))})),e.classList.add("visible")}async function Gu(n){const e=w("packageSearchInput"),t=w("packageComboWrapper"),i=w("packageDropdown");X=n,e.value=n,t.classList.add("has-value"),i.classList.remove("visible"),await To()}async function Ju(n){n&&n.stopPropagation();const e=w("packageSearchInput"),t=w("packageComboWrapper");X="",e.value="",t.classList.remove("has-value"),e.focus(),xs(),w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0,localStorage.removeItem("sqliteViewerPackage")}async function To(n=!1){if(!X){w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0;return}localStorage.setItem("sqliteViewerPackage",X),D.setPackage(X),await Xu(n)}async function Xu(n=!1){const e=w("databaseSelect");e.disabled=!1,e.innerHTML='<option value="">Loading databases...</option>';try{let t;yi?t=(await(await fetch(`${D.bridgeUrl}/api/waydroid/databases`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:X})})).json()).databases||[]:t=await D.getDatabases(X);const i=localStorage.getItem("sqliteViewerDatabase");e.innerHTML='<option value="">-- Select database --</option>',t.forEach(a=>{const l=document.createElement("option");l.value=a.name,l.textContent=`${a.name} (${a.path})`,l.dataset.path=a.path,i&&a.name===i&&(l.selected=!0),e.appendChild(l)}),await ks(n)}catch(t){e.innerHTML=`<option value="">Error: ${t.message}</option>`}}async function ks(n=!1){var l;const e=w("databaseSelect"),t=e.value;if(!t){n||(w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Select a database to view tables</div>');return}const i=e.options[e.selectedIndex],a=((l=i==null?void 0:i.dataset)==null?void 0:l.path)||"";if(localStorage.setItem("sqliteViewerDatabase",t),D.setDatabase(t,a),yi){w("statusBar").textContent=`Loading ${t} from WayDroid...`;try{const d=await fetch(`${D.bridgeUrl}/api/waydroid/read-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:X,dbPath:a})});if(!d.ok){const v=await d.json().catch(()=>({}));throw new Error(v.error||`HTTP ${d.status}`)}const y=await d.arrayBuffer();await it.open(y,t),_r="local",w("statusBar").textContent=`Loaded ${t} from WayDroid host`}catch(d){w("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load WayDroid DB: ${d.message}</div>`,w("statusBar").textContent=`Error: ${d.message}`;return}}await Io(),await Ls()}function Zu(){if(clearTimeout(Ua),w("dbSearchInput").value.trim().length<1){w("searchResultsDropdown").classList.remove("visible");return}Ua=setTimeout(()=>ps(),400)}async function ps(){const n=w("dbSearchInput").value.trim(),e=w("searchResultsDropdown");if(!X){e.innerHTML='<div class="search-result-item"><span class="file-name">Select a package first</span></div>',e.classList.add("visible");return}if(!n){e.classList.remove("visible");return}e.innerHTML='<div class="search-result-item"><span class="file-name">Searching...</span></div>',e.classList.add("visible");try{const t=await D.searchDatabases(X,n);if(t.length===0){e.innerHTML='<div class="search-result-item"><span class="file-name">No databases found</span></div>';return}e.innerHTML=t.map(i=>`<div class="search-result-item" data-name="${i.name}" data-path="${i.path}">
|
|
17
|
-
<div class="file-name">${i.name}</div>
|
|
18
|
-
<div class="file-path">${i.path}</div>
|
|
19
|
-
</div>`).join(""),e.querySelectorAll(".search-result-item").forEach(i=>{i.addEventListener("click",()=>eh(i.dataset.name,i.dataset.path))})}catch(t){e.innerHTML=`<div class="search-result-item"><span class="file-name">Search failed: ${t.message}</span></div>`}}async function eh(n,e){w("searchResultsDropdown").classList.remove("visible"),w("dbSearchInput").value="";const t=w("databaseSelect");let i=!1;for(let a=0;a<t.options.length;a++)if(t.options[a].value===n){t.value=n,i=!0;break}if(!i){const a=document.createElement("option");a.value=n,a.textContent=`${n} (${e})`,a.dataset.path=e,t.appendChild(a),t.value=n}await ks()}async function Io(){const n=w("connectionStatus");if(!(D.mode==="bridge"?!!D.bridgeUrl:!!D.adb)){n.textContent="Disconnected",n.className="connection-status disconnected";return}try{await D.checkDatabaseExists()?(n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"):(n.textContent="DB not found",n.className="connection-status disconnected")}catch{n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"}}async function Ls(){const n=w("tablesList");n.innerHTML='<div class="loading">Loading tables...</div>';try{const e=await yn().getTables();if(e.length===0){n.innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">No tables found</div>';return}n.innerHTML=e.map(t=>`
|
|
20
|
-
<div class="table-item" data-table="${t.name}">
|
|
21
|
-
<div class="accordion-header">
|
|
22
|
-
<span class="arrow">▶</span>
|
|
23
|
-
<div class="table-item-name">${t.name}</div>
|
|
24
|
-
<button class="query-btn" data-select-table="${t.name}">Query</button>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="accordion-content" id="structure-${t.name}">
|
|
27
|
-
<div style="color: #95a5a6; font-style: italic;">Loading columns...</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>`).join(""),n.querySelectorAll(".accordion-header").forEach(t=>{t.addEventListener("click",i=>{if(i.target.classList.contains("query-btn"))return;const a=t.closest(".table-item").dataset.table;rh(t,a)})}),n.querySelectorAll(".query-btn").forEach(t=>{t.addEventListener("click",i=>{i.stopPropagation(),nh(t.dataset.selectTable)})})}catch(e){n.innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load tables: ${e.message}</div>`}}function th(n){const e=document.querySelectorAll(".table-item"),t=n.toLowerCase();e.forEach(i=>{const a=i.dataset.table.toLowerCase();i.style.display=a.includes(t)?"block":"none"})}async function nh(n){me=n,ne=0,document.querySelectorAll(".table-item").forEach(a=>{const l=a.querySelector(".accordion-header"),d=a.dataset.table===n;a.style.borderLeftColor=d?"#3498db":"transparent",l.style.background=d?"#34495e":""});const e=w("queryInput"),t=e.value.trim(),i=`SELECT * FROM ${n}`;e.value=t?t+`
|
|
30
|
-
|
|
31
|
-
`+i:i,localStorage.setItem("sqliteViewerQuery",e.value),Lo==="query"?await ot(n):await Do(n)}async function rh(n,e){const t=n.closest(".table-item"),i=t.querySelector(".accordion-content"),a=t.classList.contains("expanded");t.classList.toggle("expanded"),!a&&!i.dataset.loaded&&await ih(e,i)}async function ih(n,e){try{const t=await yn().getTableStructure(n);if(e.dataset.loaded="true",!t||t.length===0){e.innerHTML='<div style="color: #95a5a6">No columns</div>';return}e.innerHTML=t.map(i=>`
|
|
32
|
-
<div class="column-item">
|
|
33
|
-
<span>${i.pk?'<span class="pk-badge" title="Primary Key">PK</span>':""}${i.name}</span>
|
|
34
|
-
<span class="column-type">${i.type}</span>
|
|
35
|
-
</div>`).join("")}catch(t){e.innerHTML=`<div style="color: #e74c3c">Error: ${t.message}</div>`}}async function ot(n,e=0){const t=w("resultsContainer"),i=w("statusBar"),a=w("welcomeMessage");t.innerHTML='<div class="loading">Loading data...</div>',a.style.display="none";try{const l=await yn().getTableData(n,J,e);ne=e,ue=l.total_count,_s(l.columns,l.rows),oh(),i.textContent=`${l.row_count} rows retrieved (${ue.toLocaleString()} total)`}catch(l){t.innerHTML=`<div class="error">Failed to load data: ${l.message}</div>`}}async function Do(n){const e=w("structureContainer");e.innerHTML='<div class="loading">Loading structure...</div>';try{const t=await yn().getTableStructure(n),i=["cid","name","type","notnull","dflt_value","pk"];e.innerHTML=`
|
|
36
|
-
<table>
|
|
37
|
-
<thead><tr>${i.map(a=>`<th>${a}</th>`).join("")}</tr></thead>
|
|
38
|
-
<tbody>
|
|
39
|
-
${t.map(a=>`<tr>${i.map(l=>`<td>${a[l]??""}</td>`).join("")}</tr>`).join("")}
|
|
40
|
-
</tbody>
|
|
41
|
-
</table>`}catch(t){e.innerHTML=`<div class="error">Failed to load structure: ${t.message}</div>`}}function sh(){const n=w("queryInput"),e=n.selectionStart,t=n.selectionEnd;return e!==t?n.value.substring(e,t).trim():null}async function Wa(){const n=sh(),e=w("queryInput").value.trim(),t=n||e,i=!!n,a=w("resultsContainer"),l=w("statusBar"),d=w("welcomeMessage");if(!t){alert("Please enter a SQL query");return}a.innerHTML='<div class="loading">Executing query...</div>',d.style.display="none",l.textContent=i?"Executing selected...":"Executing...";try{const y=await yn().executeQuery(t,J);_s(y.columns,y.rows),l.textContent=i?`${y.row_count} rows retrieved (selected query)`:`${y.row_count} rows retrieved`,w("pagination").style.display="none"}catch(y){a.innerHTML=`<div class="error">Failed to execute query: ${y.message}</div>`,l.textContent="Error"}}async function ah(){const n=w("queryInput").value.trim(),e=w("resultsContainer"),t=w("statusBar"),i=w("welcomeMessage");if(!n){alert("Please enter a SQL query");return}e.innerHTML='<div class="loading">Executing query...</div>',i.style.display="none",t.textContent="Executing...";try{const a=await yn().executeQuery(n,J);_s(a.columns,a.rows),t.textContent=`${a.row_count} rows retrieved`,w("pagination").style.display="none"}catch(a){e.innerHTML=`<div class="error">Failed to execute query: ${a.message}</div>`,t.textContent="Error"}}function _s(n,e){const t=w("resultsContainer");if(!e||e.length===0){t.innerHTML='<div class="info">No results found</div>';return}const i=`
|
|
42
|
-
<div style="padding: 15px; background: #f8f9fa; border-bottom: 2px solid #dee2e6; font-size: 13px;">
|
|
43
|
-
<strong>Table Information:</strong>
|
|
44
|
-
<span style="margin-left: 20px;"><strong>Total Rows:</strong> ${ue?ue.toLocaleString():e.length.toLocaleString()}</span>
|
|
45
|
-
<span style="margin-left: 20px;"><strong>Total Columns:</strong> ${n.length}</span>
|
|
46
|
-
<span style="margin-left: 20px;"><strong>Columns:</strong> ${n.join(", ")}</span>
|
|
47
|
-
</div>`;t.innerHTML=i+`<table>
|
|
48
|
-
<thead>
|
|
49
|
-
<tr>
|
|
50
|
-
<th style="background: #e9ecef; color: #495057; font-weight: 700;">#</th>
|
|
51
|
-
${n.map(a=>`<th style="background: #e9ecef; color: #495057; font-weight: 700;">${a}</th>`).join("")}
|
|
52
|
-
</tr>
|
|
53
|
-
</thead>
|
|
54
|
-
<tbody>
|
|
55
|
-
${e.map((a,l)=>`
|
|
56
|
-
<tr>
|
|
57
|
-
<td style="background: #f8f9fa; font-weight: 600; color: #6c757d;">${ne+l+1}</td>
|
|
58
|
-
${n.map(d=>`<td>${a[d]??'<span style="color: #999; font-style: italic;">NULL</span>'}</td>`).join("")}
|
|
59
|
-
</tr>`).join("")}
|
|
60
|
-
</tbody>
|
|
61
|
-
</table>`}function oh(){const n=w("pagination");n.style.display="flex";const e=Math.floor(ne/J)+1,t=Math.ceil(ue/J);w("firstBtn").disabled=ne===0,w("prevBtn").disabled=ne===0,w("nextBtn").disabled=ne+J>=ue,w("lastBtn").disabled=ne+J>=ue,w("gotoPageInput").max=t,w("gotoPageInput").placeholder=`1-${t}`,w("pageInfo").textContent=`Page ${e} of ${t} (${ue.toLocaleString()} total rows)`}function ch(){ne>0&&ot(me,0)}function lh(){ne>0&&ot(me,ne-J)}function uh(){ne+J<ue&&ot(me,ne+J)}function hh(){if(ne+J<ue){const n=Math.floor((ue-1)/J)*J;ot(me,n)}}function Fa(){const n=parseInt(w("gotoPageInput").value),e=Math.ceil(ue/J);n>=1&&n<=e?(ot(me,(n-1)*J),w("gotoPageInput").value=""):alert(`Please enter a page number between 1 and ${e}`)}function dh(){const n=w("limitSelect").value;n==="all"?J=ue||1e5:J=parseInt(n),ne=0,me&&ot(me,0)}function fh(n){Lo=n,document.querySelectorAll(".tab").forEach(e=>{e.classList.toggle("active",e.dataset.tab===n)}),document.querySelectorAll(".tab-content").forEach(e=>e.classList.remove("active")),n==="query"?(w("queryTab").classList.add("active"),me&&ot(me)):n==="structure"&&(w("structureTab").classList.add("active"),me&&Do(me))}async function ph(){const n=w("statusBar");n.textContent="Refreshing tables...",D.dbPath="",await Ls(),await Io(),n.textContent="Tables refreshed",setTimeout(()=>n.textContent="Ready",3e3)}function wh(){w("queryInput").value="",w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",localStorage.removeItem("sqliteViewerQuery")}function gh(){const n=w("queryInput");let e=n.value;e=e.replace(/\s+/g," ").trim(),e=e.replace(/\b(SELECT|FROM|WHERE|AND|OR|ORDER BY|GROUP BY|LIMIT|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN)\b/gi,`
|
|
62
|
-
$1`),e=e.replace(/,/g,`,
|
|
63
|
-
`),n.value=e}async function yh(){const n=w("statusBar");if(_r==="local"&&it.isOpen()){const e=it.db.export(),t=new Blob([e],{type:"application/octet-stream"});Va(t,it.fileName||"database.db"),n.textContent=`Downloaded ${it.fileName}`;return}if(D.mode!=="bridge"||!D.bridgeUrl){n.textContent="Download requires ADB Bridge connection";return}if(!X||!D.dbPath){n.textContent="Select a package and database first";return}n.textContent="Downloading database...";try{const e=await fetch(`${D.bridgeUrl}/api/pull-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:D.bridgeSerial||void 0,packageName:X,dbPath:D.dbPath})});if(!e.ok){const a=await e.json().catch(()=>({}));throw new Error(a.error||`HTTP ${e.status}`)}const t=await e.blob(),i=D.dbName||"database.db";Va(t,i),n.textContent=`Downloaded ${i}`}catch(e){n.textContent=`Download failed: ${e.message}`}}function Va(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}async function mh(n){const e=n.target.files[0];if(!e)return;const t=w("statusBar");t.textContent=`Opening ${e.name}...`;try{const i=await e.arrayBuffer();await it.open(i,e.name),_r="local";const a=w("connectionStatus");a.textContent="Local File",a.className="connection-status bridge",w("localFileName").textContent=e.name,w("localFileBadge").classList.add("visible"),w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Local file mode",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML=`<option value="">${e.name}</option>`,await Ls(),t.textContent=`Opened ${e.name}`}catch(i){t.textContent=`Failed to open file: ${i.message}`,w("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to open file: ${i.message}</div>`}n.target.value=""}function bh(){if(it.close(),_r="device",w("localFileBadge").classList.remove("visible"),w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>',w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",w("pagination").style.display="none",D.mode==="bridge"?!!D.bridgeUrl:!!D.adb){const e=w("connectionStatus");e.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",e.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected",w("packageSearchInput").disabled=!1,w("packageSearchInput").placeholder=`Search ${Ye.length} debuggable apps...`,w("databaseSelect").disabled=!1}else w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML='<option value="">Select a package first</option>'}const ji="1.1.4",vh="amitwinit/SQLite-DevTools-Mobile-ReactNative";async function Eh(){if(!navigator.userAgent.includes("Electron"))try{const n=await fetch(`https://api.github.com/repos/${vh}/releases/latest`,{signal:AbortSignal.timeout(5e3)});if(!n.ok)return;const e=await n.json(),t=(e.tag_name||"").replace(/^v/,"");if(t&&t!==ji&&Sh(t,ji)){const i=w("updateBar");w("updateMessage").textContent=`Version ${t} is available (you have ${ji})`;const a=w("updateAction");a.textContent="Download",a.href=e.html_url,a.target="_blank",i.classList.add("visible")}}catch{}}function Sh(n,e){const t=n.split(".").map(Number),i=e.split(".").map(Number);for(let a=0;a<Math.max(t.length,i.length);a++){const l=t[a]||0,d=i[a]||0;if(l>d)return!0;if(l<d)return!1}return!1}
|