Sync from GitHub 1b86c3a
Browse files- app.py +30 -0
- frontend/index.html +123 -1
- frontend/vendor/onnx/ort-wasm-simd-threaded.mjs +80 -0
- frontend/vendor/onnx/ort-wasm-simd-threaded.wasm +3 -0
- frontend/vendor/onnx/ort.wasm.min.js +8 -0
- frontend/vendor/vad/bundle.min.js +2 -0
- frontend/vendor/vad/silero_vad_v5.onnx +3 -0
- frontend/vendor/vad/vad.worklet.bundle.min.js +1 -0
app.py
CHANGED
|
@@ -367,6 +367,36 @@ def serve_media(filename: str):
|
|
| 367 |
return FileResponse(path)
|
| 368 |
|
| 369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 370 |
@app.get("/pdf/{doc_id}")
|
| 371 |
def serve_pdf(doc_id: str):
|
| 372 |
"""A manual's source PDF (kept for direct download/open-in-tab; the viewer
|
|
|
|
| 367 |
return FileResponse(path)
|
| 368 |
|
| 369 |
|
| 370 |
+
# Self-hosted browser assets for the voice mode: Silero VAD (the always-on
|
| 371 |
+
# listener) + onnxruntime-web's wasm runtime, vendored under frontend/vendor/ so
|
| 372 |
+
# nothing on the listening path depends on a CDN. Pinned + immutable → long
|
| 373 |
+
# cache. Only known extensions are served, and the resolved path is confined to
|
| 374 |
+
# the vendor dir (no traversal).
|
| 375 |
+
_VENDOR_DIR = os.path.join(_FRONTEND_DIR, "vendor")
|
| 376 |
+
_VENDOR_MEDIA_TYPES = {
|
| 377 |
+
".js": "text/javascript",
|
| 378 |
+
".mjs": "text/javascript",
|
| 379 |
+
".wasm": "application/wasm",
|
| 380 |
+
".onnx": "application/octet-stream",
|
| 381 |
+
}
|
| 382 |
+
|
| 383 |
+
|
| 384 |
+
@app.get("/vendor/{path:path}")
|
| 385 |
+
def serve_vendor(path: str):
|
| 386 |
+
"""Vendored voice-mode assets (vad worklet/model + ort wasm runtime)."""
|
| 387 |
+
full = os.path.normpath(os.path.join(_VENDOR_DIR, path))
|
| 388 |
+
if not full.startswith(_VENDOR_DIR + os.sep) or not os.path.isfile(full):
|
| 389 |
+
return Response(status_code=404)
|
| 390 |
+
media_type = _VENDOR_MEDIA_TYPES.get(os.path.splitext(full)[1].lower())
|
| 391 |
+
if media_type is None:
|
| 392 |
+
return Response(status_code=404)
|
| 393 |
+
return FileResponse(
|
| 394 |
+
full,
|
| 395 |
+
media_type=media_type,
|
| 396 |
+
headers={"Cache-Control": "public, max-age=86400"},
|
| 397 |
+
)
|
| 398 |
+
|
| 399 |
+
|
| 400 |
@app.get("/pdf/{doc_id}")
|
| 401 |
def serve_pdf(doc_id: str):
|
| 402 |
"""A manual's source PDF (kept for direct download/open-in-tab; the viewer
|
frontend/index.html
CHANGED
|
@@ -213,17 +213,35 @@
|
|
| 213 |
Try <em>“go to brake bleeding”</em>, <em>“next page”</em>, <em>“circle the brake hoses”</em>.
|
| 214 |
</div>
|
| 215 |
|
| 216 |
-
<!-- input
|
|
|
|
| 217 |
<div class="flex items-end gap-2 rounded-2xl border border-brand-200 bg-white focus-within:border-brand-400 focus-within:ring-2 focus-within:ring-brand-100 transition px-2.5 py-1.5">
|
| 218 |
<textarea x-model="input" @keydown.enter.prevent="send()" rows="1"
|
| 219 |
:disabled="!ready"
|
| 220 |
placeholder="Type a request…"
|
| 221 |
class="flex-1 resize-none bg-transparent px-1.5 py-1.5 text-sm text-navy outline-none placeholder:text-brand-400/70 max-h-24"></textarea>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
<button @click="send()" :disabled="loading || !ready || !input.trim()" aria-label="Send"
|
| 223 |
class="shrink-0 grid place-items-center w-9 h-9 rounded-xl bg-brand-600 text-white hover:bg-brand-700 disabled:opacity-40 disabled:cursor-not-allowed transition">
|
| 224 |
<i data-lucide="arrow-up" class="w-5 h-5"></i>
|
| 225 |
</button>
|
| 226 |
</div>
|
|
|
|
|
|
|
|
|
|
| 227 |
</div>
|
| 228 |
</section>
|
| 229 |
|
|
@@ -364,6 +382,11 @@ function repairGuy() {
|
|
| 364 |
// compact memory of past turns ([{request, action}]) sent with each turn so
|
| 365 |
// the agent can resolve references ("circle the other one", "go back").
|
| 366 |
lastRequest:'', activity:null, history:[],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 367 |
// left-rail tabs: 'toc' (the manual's contents) | 'trace' (the agent's full
|
| 368 |
// diagnostic trace for the session). `trace` accumulates structured entries;
|
| 369 |
// `traceSeen` drives the unseen-activity dot on the Diagnostics tab.
|
|
@@ -677,6 +700,20 @@ function repairGuy() {
|
|
| 677 |
console.log('[circle-diag]', {page:ev.page, bbox:ev.bbox,
|
| 678 |
dimsFromBackend:ev.dims, natLoaded:this.nat[ev.page],
|
| 679 |
boxDimsUsed:this.boxDims(ev.page), usingBackendDims:!!ev.dims});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 680 |
find.icon='target'; find.label=`Circled “${ev.target}”`; this.recordHistory(`circled “${ev.target}” on p.${ev.page}`); }
|
| 681 |
else { find.icon='file-text'; find.label=`Showed “${ev.target}”`; this.recordHistory(`showed “${ev.target}” on p.${ev.page}`); } // page found, not pinpointed
|
| 682 |
find.detail=`p.${ev.page}${meta}`;
|
|
@@ -690,6 +727,91 @@ function repairGuy() {
|
|
| 690 |
}
|
| 691 |
return false;
|
| 692 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 693 |
}
|
| 694 |
}
|
| 695 |
</script>
|
|
|
|
| 213 |
Try <em>“go to brake bleeding”</em>, <em>“next page”</em>, <em>“circle the brake hoses”</em>.
|
| 214 |
</div>
|
| 215 |
|
| 216 |
+
<!-- input — type, or tap the mic to talk (transcript flows into the
|
| 217 |
+
SAME send() path as typing) -->
|
| 218 |
<div class="flex items-end gap-2 rounded-2xl border border-brand-200 bg-white focus-within:border-brand-400 focus-within:ring-2 focus-within:ring-brand-100 transition px-2.5 py-1.5">
|
| 219 |
<textarea x-model="input" @keydown.enter.prevent="send()" rows="1"
|
| 220 |
:disabled="!ready"
|
| 221 |
placeholder="Type a request…"
|
| 222 |
class="flex-1 resize-none bg-transparent px-1.5 py-1.5 text-sm text-navy outline-none placeholder:text-brand-400/70 max-h-24"></textarea>
|
| 223 |
+
<!-- mic: arms always-on listening (Silero VAD → Moonshine, fully
|
| 224 |
+
in-browser). The tap also satisfies the mobile mic-permission
|
| 225 |
+
gesture; the voice stack is lazy-loaded on first use so it never
|
| 226 |
+
touches initial page load. -->
|
| 227 |
+
<button @click="toggleVoice()" :disabled="!ready || voice==='loading'"
|
| 228 |
+
:aria-pressed="listening" aria-label="Voice input"
|
| 229 |
+
:title="voice==='on' ? 'Listening — tap to stop' : (voice==='loading' ? 'Loading voice…' : (voiceErr || 'Tap to talk'))"
|
| 230 |
+
class="shrink-0 grid place-items-center w-9 h-9 rounded-xl transition disabled:cursor-not-allowed"
|
| 231 |
+
:class="voice==='on' ? 'bg-accent-500 text-white animate-pulse'
|
| 232 |
+
: voice==='loading' ? 'bg-brand-100 text-brand-500 animate-pulse'
|
| 233 |
+
: voice==='error' ? 'bg-red-100 text-red-600 hover:bg-red-200'
|
| 234 |
+
: 'text-brand-500 hover:text-navy hover:bg-brand-100'">
|
| 235 |
+
<i data-lucide="audio-lines" class="w-5 h-5"></i>
|
| 236 |
+
</button>
|
| 237 |
<button @click="send()" :disabled="loading || !ready || !input.trim()" aria-label="Send"
|
| 238 |
class="shrink-0 grid place-items-center w-9 h-9 rounded-xl bg-brand-600 text-white hover:bg-brand-700 disabled:opacity-40 disabled:cursor-not-allowed transition">
|
| 239 |
<i data-lucide="arrow-up" class="w-5 h-5"></i>
|
| 240 |
</button>
|
| 241 |
</div>
|
| 242 |
+
<p x-show="voice==='on'" class="text-[11px] text-accent-600 px-1">Listening — just speak. Tap the mic to stop.</p>
|
| 243 |
+
<p x-show="voice==='loading'" class="text-[11px] text-brand-400 px-1">Loading voice (first time downloads the model)…</p>
|
| 244 |
+
<p x-show="voice==='error' && voiceErr" class="text-[11px] text-red-500 px-1" x-text="'Voice unavailable: ' + voiceErr"></p>
|
| 245 |
</div>
|
| 246 |
</section>
|
| 247 |
|
|
|
|
| 382 |
// compact memory of past turns ([{request, action}]) sent with each turn so
|
| 383 |
// the agent can resolve references ("circle the other one", "go back").
|
| 384 |
lastRequest:'', activity:null, history:[],
|
| 385 |
+
// voice mode: always-on, fully in-browser (Silero VAD segments speech →
|
| 386 |
+
// Moonshine transcribes → the transcript is fed into send() like typed
|
| 387 |
+
// text). Lazy-loaded on first mic tap; `voice` is the state machine
|
| 388 |
+
// (idle | loading | on | error). vad/asr are the one-time-built singletons.
|
| 389 |
+
voice:'idle', voiceErr:'', vad:null, asr:null, wakeLock:null,
|
| 390 |
// left-rail tabs: 'toc' (the manual's contents) | 'trace' (the agent's full
|
| 391 |
// diagnostic trace for the session). `trace` accumulates structured entries;
|
| 392 |
// `traceSeen` drives the unseen-activity dot on the Diagnostics tab.
|
|
|
|
| 700 |
console.log('[circle-diag]', {page:ev.page, bbox:ev.bbox,
|
| 701 |
dimsFromBackend:ev.dims, natLoaded:this.nat[ev.page],
|
| 702 |
boxDimsUsed:this.boxDims(ev.page), usingBackendDims:!!ev.dims});
|
| 703 |
+
// DIAGNOSTIC 2: after Alpine renders, measure the ACTUAL drawn rect.
|
| 704 |
+
// Tells us if the box is (a) absent from the DOM, (b) zero-size,
|
| 705 |
+
// (c) rendered but off-screen/clipped, or (d) visible on-screen.
|
| 706 |
+
this.$nextTick(()=>{ setTimeout(()=>{
|
| 707 |
+
const rects=[...document.querySelectorAll('svg[viewBox] rect')];
|
| 708 |
+
const vis=rects.map(rc=>{ const svg=rc.ownerSVGElement;
|
| 709 |
+
const shown=svg.checkVisibility ? svg.checkVisibility() : (svg.getClientRects().length>0);
|
| 710 |
+
const r=rc.getBoundingClientRect();
|
| 711 |
+
const img=svg.parentElement.querySelector('img'); const ir=img&&img.getBoundingClientRect();
|
| 712 |
+
return {svgShown:shown, rect:{x:Math.round(r.x),y:Math.round(r.y),w:Math.round(r.width),h:Math.round(r.height)},
|
| 713 |
+
img: ir&&{x:Math.round(ir.x),y:Math.round(ir.y),w:Math.round(ir.width),h:Math.round(ir.height)},
|
| 714 |
+
onScreen: r.width>1 && r.height>1 && r.bottom>0 && r.top<innerHeight && r.right>0 && r.left<innerWidth}; });
|
| 715 |
+
console.log('[circle-render]', {viewPage:this.viewPage, spread:this.spreadPages, rectsFound:rects.length, detail:vis});
|
| 716 |
+
},50); });
|
| 717 |
find.icon='target'; find.label=`Circled “${ev.target}”`; this.recordHistory(`circled “${ev.target}” on p.${ev.page}`); }
|
| 718 |
else { find.icon='file-text'; find.label=`Showed “${ev.target}”`; this.recordHistory(`showed “${ev.target}” on p.${ev.page}`); } // page found, not pinpointed
|
| 719 |
find.detail=`p.${ev.page}${meta}`;
|
|
|
|
| 727 |
}
|
| 728 |
return false;
|
| 729 |
},
|
| 730 |
+
|
| 731 |
+
// --- voice mode: always-on listening, fully in-browser ------------
|
| 732 |
+
// Tap the mic to arm; Silero VAD (vendored, runs on onnxruntime-web's
|
| 733 |
+
// wasm) listens continuously and fires onSpeechEnd when an utterance
|
| 734 |
+
// finishes — that's the "send". The clip is transcribed by Moonshine
|
| 735 |
+
// (transformers.js) and dropped into send() exactly like typed text, so
|
| 736 |
+
// the find/nav pipeline downstream is untouched. Nothing leaves the
|
| 737 |
+
// browser. The whole stack is lazy-loaded on first tap, so it never
|
| 738 |
+
// affects initial page load or the type-only flow.
|
| 739 |
+
get listening(){ return this.voice==='on'; },
|
| 740 |
+
|
| 741 |
+
async toggleVoice(){
|
| 742 |
+
if(this.voice==='loading') return;
|
| 743 |
+
if(this.voice==='on'){ await this.voiceStop(); return; }
|
| 744 |
+
await this.voiceStart();
|
| 745 |
+
},
|
| 746 |
+
|
| 747 |
+
async voiceStart(){
|
| 748 |
+
this.voice='loading'; this.voiceErr='';
|
| 749 |
+
try{
|
| 750 |
+
if(!this.vad) await this.voiceInit(); // one-time: libs + models + mic
|
| 751 |
+
await this.vad.start();
|
| 752 |
+
this.acquireWakeLock(); // keep the screen awake while listening (mobile)
|
| 753 |
+
this.voice='on';
|
| 754 |
+
}catch(e){
|
| 755 |
+
console.error('voice start failed', e);
|
| 756 |
+
this.voiceErr=(e && e.message) || String(e); this.voice='error';
|
| 757 |
+
}
|
| 758 |
+
},
|
| 759 |
+
|
| 760 |
+
async voiceStop(){
|
| 761 |
+
try{ this.vad?.pause(); }catch(_){} // keep the instance warm; re-arm is instant
|
| 762 |
+
this.releaseWakeLock();
|
| 763 |
+
this.voice='idle';
|
| 764 |
+
},
|
| 765 |
+
|
| 766 |
+
// one-time heavy setup, run on the first mic tap
|
| 767 |
+
async voiceInit(){
|
| 768 |
+
// 1) self-hosted onnxruntime-web (global `ort`) + Silero VAD (global `vad`),
|
| 769 |
+
// loaded as injected <script>s so they stay out of initial page load.
|
| 770 |
+
// Single-threaded → no SharedArrayBuffer, so no cross-origin isolation
|
| 771 |
+
// is needed inside the HF Spaces iframe.
|
| 772 |
+
await this.loadScript('/vendor/onnx/ort.wasm.min.js');
|
| 773 |
+
window.ort.env.wasm.numThreads = 1;
|
| 774 |
+
window.ort.env.wasm.wasmPaths = '/vendor/onnx/';
|
| 775 |
+
await this.loadScript('/vendor/vad/bundle.min.js');
|
| 776 |
+
|
| 777 |
+
// 2) Moonshine ASR (transformers.js from CDN; the tiny model is fetched
|
| 778 |
+
// from the HF hub once, then cached in the browser).
|
| 779 |
+
const { pipeline } = await import('https://cdn.jsdelivr.net/npm/@huggingface/transformers');
|
| 780 |
+
this.asr = await pipeline('automatic-speech-recognition', 'onnx-community/moonshine-tiny-ONNX');
|
| 781 |
+
|
| 782 |
+
// 3) the mic: Silero VAD segments speech; onSpeechEnd is our send trigger
|
| 783 |
+
this.vad = await window.vad.MicVAD.new({
|
| 784 |
+
baseAssetPath: '/vendor/vad/',
|
| 785 |
+
onnxWASMBasePath: '/vendor/onnx/',
|
| 786 |
+
model: 'v5',
|
| 787 |
+
onSpeechEnd: (audio)=> this.onUtterance(audio),
|
| 788 |
+
});
|
| 789 |
+
},
|
| 790 |
+
|
| 791 |
+
// a finished utterance (Float32Array @16kHz) → transcribe → normal send()
|
| 792 |
+
async onUtterance(audio){
|
| 793 |
+
if(this.loading) return; // a turn is already running; drop this clip (v1)
|
| 794 |
+
let text='';
|
| 795 |
+
try{ const out = await this.asr(audio); text=(out?.text||'').trim(); }
|
| 796 |
+
catch(e){ console.error('transcribe failed', e); return; }
|
| 797 |
+
if(!text) return;
|
| 798 |
+
this.input = text;
|
| 799 |
+
this.send(); // routes locally ("next page") or runs a find turn
|
| 800 |
+
},
|
| 801 |
+
|
| 802 |
+
// inject a <script> once and resolve when it has loaded
|
| 803 |
+
loadScript(src){
|
| 804 |
+
return new Promise((resolve, reject)=>{
|
| 805 |
+
if(document.querySelector(`script[data-src="${src}"]`)) return resolve();
|
| 806 |
+
const s=document.createElement('script');
|
| 807 |
+
s.src=src; s.async=true; s.dataset.src=src;
|
| 808 |
+
s.onload=()=>resolve(); s.onerror=()=>reject(new Error('failed to load '+src));
|
| 809 |
+
document.head.appendChild(s);
|
| 810 |
+
});
|
| 811 |
+
},
|
| 812 |
+
|
| 813 |
+
async acquireWakeLock(){ try{ this.wakeLock = await navigator.wakeLock?.request('screen'); }catch(_){} },
|
| 814 |
+
releaseWakeLock(){ try{ this.wakeLock?.release(); }catch(_){} this.wakeLock=null; },
|
| 815 |
}
|
| 816 |
}
|
| 817 |
</script>
|
frontend/vendor/onnx/ort-wasm-simd-threaded.mjs
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
var ortWasmThreaded = (() => {
|
| 3 |
+
var _scriptName = import.meta.url;
|
| 4 |
+
|
| 5 |
+
return (
|
| 6 |
+
async function(moduleArg = {}) {
|
| 7 |
+
var moduleRtn;
|
| 8 |
+
|
| 9 |
+
function aa(){g.buffer!=l.buffer&&m();return l}function n(){g.buffer!=l.buffer&&m();return ba}function r(){g.buffer!=l.buffer&&m();return ca}function u(){g.buffer!=l.buffer&&m();return da}function ea(){g.buffer!=l.buffer&&m();return fa}var w=Object.assign({},moduleArg),ha,x,ia=new Promise((a,b)=>{ha=a;x=b}),ja="object"==typeof window,A="function"==typeof importScripts,B="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,C=A&&"em-pthread"==self.name;
|
| 10 |
+
if(B){const {createRequire:a}=await import("module");var require=a(import.meta.url),D=require("worker_threads");global.Worker=D.Worker;C=(A=!D.lb)&&"em-pthread"==D.workerData}"use strict";w.mountExternalData=(a,b)=>{(w.Ua||(w.Ua=new Map)).set(a,b)};w.unmountExternalData=()=>{delete w.Ua};
|
| 11 |
+
var SharedArrayBuffer=globalThis.SharedArrayBuffer??(new WebAssembly.Memory({initial:0,maximum:0,shared:!0})).buffer.constructor,ka=Object.assign({},w),la="./this.program",E=(a,b)=>{throw b;},F="",ma,G,H;
|
| 12 |
+
if(B){var fs=require("fs"),na=require("path");F=require("url").fileURLToPath(new URL("./",import.meta.url));ma=(a,b)=>{a=oa(a)?new URL(a):na.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};H=a=>{a=ma(a,!0);a.buffer||(a=new Uint8Array(a));return a};G=(a,b,c,d=!0)=>{a=oa(a)?new URL(a):na.normalize(a);fs.readFile(a,d?void 0:"utf8",(f,h)=>{f?c(f):b(d?h.buffer:h)})};!w.thisProgram&&1<process.argv.length&&(la=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);E=(a,b)=>{process.exitCode=
|
| 13 |
+
a;throw b;}}else if(ja||A)A?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),B||(ma=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},A&&(H=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),G=(a,b,c)=>{var d=new XMLHttpRequest;
|
| 14 |
+
d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)});B&&"undefined"==typeof performance&&(global.performance=require("perf_hooks").performance);var pa=console.log.bind(console),qa=console.error.bind(console);B&&(pa=(...a)=>fs.writeSync(1,a.join(" ")+"\n"),qa=(...a)=>fs.writeSync(2,a.join(" ")+"\n"));var ra=pa,I=qa;Object.assign(w,ka);ka=null;
|
| 15 |
+
if(C){var sa;if(B){var ta=D.parentPort;ta.on("message",b=>onmessage({data:b}));Object.assign(globalThis,{self:global,importScripts:()=>{},postMessage:b=>ta.postMessage(b),performance:global.performance||{now:Date.now}})}var ua=!1;I=function(...b){b=b.join(" ");B?fs.writeSync(2,b+"\n"):console.error(b)};self.alert=function(...b){postMessage({Za:"alert",text:b.join(" "),mb:K()})};w.instantiateWasm=(b,c)=>new Promise(d=>{sa=f=>{f=new WebAssembly.Instance(f,va());c(f);d()}});self.onunhandledrejection=
|
| 16 |
+
b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.cmd;if("load"===d){let f=[];self.onmessage=h=>f.push(h);self.startWorker=()=>{postMessage({cmd:"loaded"});for(let h of f)a(h);self.onmessage=a};for(const h of c.handlers)if(!w[h]||w[h].proxy)w[h]=(...k)=>{postMessage({Za:"callHandler",kb:h,args:k})},"print"==h&&(ra=w[h]),"printErr"==h&&(I=w[h]);g=c.wasmMemory;m();sa(c.wasmModule)}else if("run"===d){wa(c.pthread_ptr,0,0,1,0,0);xa(c.pthread_ptr);ya();za();ua||=!0;try{Aa(c.start_routine,c.arg)}catch(f){if("unwind"!=
|
| 17 |
+
f)throw f;}}else"cancel"===d?K()&&Ba(-1):"setimmediate"!==c.target&&("checkMailbox"===d?ua&&Ca():d&&(I(`worker: received unknown command ${d}`),I(c)))}catch(f){throw Da(),f;}}self.onmessage=a}var L;w.wasmBinary&&(L=w.wasmBinary);var g,Ea,Fa=!1,M,l,ba,ca,da,N,fa;
|
| 18 |
+
function m(){var a=g.buffer;w.HEAP8=l=new Int8Array(a);w.HEAP16=new Int16Array(a);w.HEAPU8=ba=new Uint8Array(a);w.HEAPU16=new Uint16Array(a);w.HEAP32=ca=new Int32Array(a);w.HEAPU32=da=new Uint32Array(a);w.HEAPF32=new Float32Array(a);w.HEAPF64=fa=new Float64Array(a);w.HEAP64=N=new BigInt64Array(a);w.HEAPU64=new BigUint64Array(a)}
|
| 19 |
+
if(!C){g=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0});if(!(g.buffer instanceof SharedArrayBuffer))throw I("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),B&&I("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");m()}
|
| 20 |
+
var Ga=[],Ha=[],Ia=[],O=0,Ja=null,P=null;function Ka(){O--;if(0==O&&(null!==Ja&&(clearInterval(Ja),Ja=null),P)){var a=P;P=null;a()}}function La(a){a="Aborted("+a+")";I(a);Fa=!0;M=1;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");x(a);throw a;}var Ma=a=>a.startsWith("data:application/octet-stream;base64,"),oa=a=>a.startsWith("file://"),Na;function Oa(a){if(a==Na&&L)return new Uint8Array(L);if(H)return H(a);throw"both async and sync fetching of the wasm failed";}
|
| 21 |
+
function Pa(a){if(!L&&(ja||A)){if("function"==typeof fetch&&!oa(a))return fetch(a,{credentials:"same-origin"}).then(b=>{if(!b.ok)throw`failed to load wasm binary file at '${a}'`;return b.arrayBuffer()}).catch(()=>Oa(a));if(G)return new Promise((b,c)=>{G(a,d=>b(new Uint8Array(d)),c)})}return Promise.resolve().then(()=>Oa(a))}function Qa(a,b,c){return Pa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{I(`failed to asynchronously prepare wasm: ${d}`);La(d)})}
|
| 22 |
+
function Ra(a,b){var c=Na;return L||"function"!=typeof WebAssembly.instantiateStreaming||Ma(c)||oa(c)||B||"function"!=typeof fetch?Qa(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(f){I(`wasm streaming compile failed: ${f}`);I("falling back to ArrayBuffer instantiation");return Qa(c,a,b)}))}
|
| 23 |
+
function va(){Sa={j:Ta,b:Ua,E:Va,g:Wa,V:Xa,A:Ya,C:Za,W:$a,T:ab,L:bb,S:cb,o:db,B:eb,y:fb,U:gb,z:hb,_:ib,Z:jb,P:kb,w:lb,F:mb,k:nb,O:xa,Y:ob,I:pb,J:qb,K:rb,G:sb,H:tb,v:ub,q:vb,l:wb,p:xb,e:yb,X:zb,x:Ab,d:Bb,f:Cb,i:Db,u:Eb,t:Fb,s:Gb,Q:Hb,R:Ib,D:Jb,h:Kb,n:Lb,M:Mb,m:Nb,a:g,r:Ob,N:Pb,c:Qb};return{a:Sa}}
|
| 24 |
+
var Rb={822132:(a,b,c,d)=>{if("undefined"==typeof w||!w.Ua)return 1;a=Q(a>>>0);a.startsWith("./")&&(a=a.substring(2));a=w.Ua.get(a);if(!a)return 2;b>>>=0;c>>>=0;d>>>=0;if(b+c>a.byteLength)return 3;try{return n().set(a.subarray(b,b+c),d>>>0),0}catch{return 4}},822633:()=>"undefined"!==typeof wasmOffsetConverter};function Ta(){return"undefined"!==typeof wasmOffsetConverter}function Sb(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}
|
| 25 |
+
var Tb=a=>{a.terminate();a.onmessage=()=>{}},Wb=a=>{0==R.length&&(Ub(),Vb(R[0]));var b=R.pop();if(!b)return 6;S.push(b);T[a.Ra]=b;b.Ra=a.Ra;var c={cmd:"run",start_routine:a.cb,arg:a.ab,pthread_ptr:a.Ra};B&&b.unref();b.postMessage(c,a.ib);return 0},U=0,V=(a,b,...c)=>{for(var d=2*c.length,f=$b(),h=ac(8*d),k=h>>>3,q=0;q<c.length;q++){var y=c[q];"bigint"==typeof y?(N[k+2*q]=1n,N[k+2*q+1]=y):(N[k+2*q]=0n,ea()[k+2*q+1>>>0]=y)}a=bc(a,0,d,h,b);cc(f);return a};
|
| 26 |
+
function Ob(a){if(C)return V(0,1,a);M=a;if(!(0<U)){for(var b of S)Tb(b);for(b of R)Tb(b);R=[];S=[];T=[];Fa=!0}E(a,new Sb(a))}function dc(a){if(C)return V(1,0,a);Jb(a)}var Jb=a=>{M=a;if(C)throw dc(a),"unwind";Ob(a)},R=[],S=[],ec=[],T={};function fc(){for(var a=w.numThreads-1;a--;)Ub();Ga.unshift(()=>{O++;gc(()=>Ka())})}var ic=a=>{var b=a.Ra;delete T[b];R.push(a);S.splice(S.indexOf(a),1);a.Ra=0;hc(b)};function za(){ec.forEach(a=>a())}
|
| 27 |
+
var Vb=a=>new Promise(b=>{a.onmessage=h=>{h=h.data;var k=h.cmd;if(h.targetThread&&h.targetThread!=K()){var q=T[h.targetThread];q?q.postMessage(h,h.transferList):I(`Internal error! Worker sent a message "${k}" to target pthread ${h.targetThread}, but that thread no longer exists!`)}else if("checkMailbox"===k)Ca();else if("spawnThread"===k)Wb(h);else if("cleanupThread"===k)ic(T[h.thread]);else if("killThread"===k)h=h.thread,k=T[h],delete T[h],Tb(k),hc(h),S.splice(S.indexOf(k),1),k.Ra=0;else if("cancelThread"===
|
| 28 |
+
k)T[h.thread].postMessage({cmd:"cancel"});else if("loaded"===k)a.loaded=!0,B&&!a.Ra&&a.unref(),b(a);else if("alert"===k)alert(`Thread ${h.threadId}: ${h.text}`);else if("setimmediate"===h.target)a.postMessage(h);else if("callHandler"===k)w[h.handler](...h.args);else k&&I(`worker sent an unknown command ${k}`)};a.onerror=h=>{I(`${"worker sent an error!"} ${h.filename}:${h.lineno}: ${h.message}`);throw h;};B&&(a.on("message",h=>a.onmessage({data:h})),a.on("error",h=>a.onerror(h)));var c=[],d=[],f;for(f of d)w.hasOwnProperty(f)&&
|
| 29 |
+
c.push(f);a.postMessage({cmd:"load",handlers:c,wasmMemory:g,wasmModule:Ea})});function gc(a){C?a():Promise.all(R.map(Vb)).then(a)}function Ub(){var a=new Worker(new URL(import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});R.push(a)}var jc=a=>{for(;0<a.length;)a.shift()(w)},ya=()=>{var a=K(),b=u()[a+52>>>2>>>0];a=u()[a+56>>>2>>>0];kc(b,b-a);cc(b)},lc=[],mc,Aa=(a,b)=>{U=0;var c=lc[a];c||(a>=lc.length&&(lc.length=a+1),lc[a]=c=mc.get(a));a=c(b);0<U?M=a:Ba(a)};
|
| 30 |
+
class nc{constructor(a){this.Xa=a-24}}var oc=0,pc=0;function Ua(a,b,c){a>>>=0;var d=new nc(a);b>>>=0;c>>>=0;u()[d.Xa+16>>>2>>>0]=0;u()[d.Xa+4>>>2>>>0]=b;u()[d.Xa+8>>>2>>>0]=c;oc=a;pc++;throw oc;}function qc(a,b,c,d){return C?V(2,1,a,b,c,d):Va(a,b,c,d)}
|
| 31 |
+
function Va(a,b,c,d){a>>>=0;b>>>=0;c>>>=0;d>>>=0;if("undefined"==typeof SharedArrayBuffer)return I("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var f=[];if(C&&0===f.length)return qc(a,b,c,d);a={cb:c,Ra:a,ab:d,ib:f};return C?(a.Za="spawnThread",postMessage(a,f),0):Wb(a)}
|
| 32 |
+
var rc="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,sc=(a,b,c)=>{b>>>=0;var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.buffer&&rc)return rc.decode(a.buffer instanceof SharedArrayBuffer?a.slice(b,c):a.subarray(b,c));for(d="";b<c;){var f=a[b++];if(f&128){var h=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|h);else{var k=a[b++]&63;f=224==(f&240)?(f&15)<<12|h<<6|k:(f&7)<<18|h<<12|k<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>
|
| 33 |
+
10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d},Q=(a,b)=>(a>>>=0)?sc(n(),a,b):"";function Wa(a,b,c){return C?V(3,1,a,b,c):0}function Xa(a,b){if(C)return V(4,1,a,b)}
|
| 34 |
+
var tc=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},uc=(a,b,c,d)=>{c>>>=0;if(!(0<d))return 0;var f=c;d=c+d-1;for(var h=0;h<a.length;++h){var k=a.charCodeAt(h);if(55296<=k&&57343>=k){var q=a.charCodeAt(++h);k=65536+((k&1023)<<10)|q&1023}if(127>=k){if(c>=d)break;b[c++>>>0]=k}else{if(2047>=k){if(c+1>=d)break;b[c++>>>0]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++>>>0]=224|k>>12}else{if(c+3>=d)break;b[c++>>>0]=240|k>>
|
| 35 |
+
18;b[c++>>>0]=128|k>>12&63}b[c++>>>0]=128|k>>6&63}b[c++>>>0]=128|k&63}}b[c>>>0]=0;return c-f},W=(a,b,c)=>uc(a,n(),b,c);function Ya(a,b){if(C)return V(5,1,a,b)}function Za(a,b,c){if(C)return V(6,1,a,b,c)}function $a(a,b,c){return C?V(7,1,a,b,c):0}function ab(a,b){if(C)return V(8,1,a,b)}function bb(a,b,c){if(C)return V(9,1,a,b,c)}function cb(a,b,c,d){if(C)return V(10,1,a,b,c,d)}function db(a,b,c,d){if(C)return V(11,1,a,b,c,d)}function eb(a,b,c,d){if(C)return V(12,1,a,b,c,d)}
|
| 36 |
+
function fb(a){if(C)return V(13,1,a)}function gb(a,b){if(C)return V(14,1,a,b)}function hb(a,b,c){if(C)return V(15,1,a,b,c)}var ib=()=>{La("")},jb=()=>1;function kb(a){wa(a>>>0,!A,1,!ja,131072,!1);za()}function xa(a){a>>>=0;"function"===typeof Atomics.jb&&(Atomics.jb(r(),a>>>2,a).value.then(Ca),a+=128,Atomics.store(r(),a>>>2,1))}
|
| 37 |
+
var Ca=()=>{var a=K();if(a&&(xa(a),a=vc,!Fa))try{if(a(),!(0<U))try{C?Ba(M):Jb(M)}catch(b){b instanceof Sb||"unwind"==b||E(1,b)}}catch(b){b instanceof Sb||"unwind"==b||E(1,b)}};function lb(a,b){a>>>=0;a==b>>>0?setTimeout(Ca):C?postMessage({targetThread:a,cmd:"checkMailbox"}):(a=T[a])&&a.postMessage({cmd:"checkMailbox"})}var wc=[];function mb(a,b,c,d,f){b>>>=0;d/=2;wc.length=d;c=f>>>0>>>3;for(f=0;f<d;f++)wc[f]=N[c+2*f]?N[c+2*f+1]:ea()[c+2*f+1>>>0];return(b?Rb[b]:xc[a])(...wc)}
|
| 38 |
+
function nb(a){a>>>=0;C?postMessage({cmd:"cleanupThread",thread:a}):ic(T[a])}function ob(a){B&&T[a>>>0].ref()}
|
| 39 |
+
function pb(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);b>>>=0;a=new Date(1E3*a);r()[b>>>2>>>0]=a.getUTCSeconds();r()[b+4>>>2>>>0]=a.getUTCMinutes();r()[b+8>>>2>>>0]=a.getUTCHours();r()[b+12>>>2>>>0]=a.getUTCDate();r()[b+16>>>2>>>0]=a.getUTCMonth();r()[b+20>>>2>>>0]=a.getUTCFullYear()-1900;r()[b+24>>>2>>>0]=a.getUTCDay();a=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;r()[b+28>>>2>>>0]=a}
|
| 40 |
+
var X=a=>0===a%4&&(0!==a%100||0===a%400),yc=[0,31,60,91,121,152,182,213,244,274,305,335],zc=[0,31,59,90,120,151,181,212,243,273,304,334];
|
| 41 |
+
function qb(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);b>>>=0;a=new Date(1E3*a);r()[b>>>2>>>0]=a.getSeconds();r()[b+4>>>2>>>0]=a.getMinutes();r()[b+8>>>2>>>0]=a.getHours();r()[b+12>>>2>>>0]=a.getDate();r()[b+16>>>2>>>0]=a.getMonth();r()[b+20>>>2>>>0]=a.getFullYear()-1900;r()[b+24>>>2>>>0]=a.getDay();var c=(X(a.getFullYear())?yc:zc)[a.getMonth()]+a.getDate()-1|0;r()[b+28>>>2>>>0]=c;r()[b+36>>>2>>>0]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();
|
| 42 |
+
var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;r()[b+32>>>2>>>0]=a}
|
| 43 |
+
function rb(a){a>>>=0;var b=new Date(r()[a+20>>>2>>>0]+1900,r()[a+16>>>2>>>0],r()[a+12>>>2>>>0],r()[a+8>>>2>>>0],r()[a+4>>>2>>>0],r()[a>>>2>>>0],0),c=r()[a+32>>>2>>>0],d=b.getTimezoneOffset(),f=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),h=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),k=Math.min(h,f);0>c?r()[a+32>>>2>>>0]=Number(f!=h&&k==d):0<c!=(k==d)&&(f=Math.max(h,f),b.setTime(b.getTime()+6E4*((0<c?k:f)-d)));r()[a+24>>>2>>>0]=b.getDay();c=(X(b.getFullYear())?yc:zc)[b.getMonth()]+
|
| 44 |
+
b.getDate()-1|0;r()[a+28>>>2>>>0]=c;r()[a>>>2>>>0]=b.getSeconds();r()[a+4>>>2>>>0]=b.getMinutes();r()[a+8>>>2>>>0]=b.getHours();r()[a+12>>>2>>>0]=b.getDate();r()[a+16>>>2>>>0]=b.getMonth();r()[a+20>>>2>>>0]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)}function sb(a,b,c,d,f,h,k){return C?V(16,1,a,b,c,d,f,h,k):-52}function tb(a,b,c,d,f,h){if(C)return V(17,1,a,b,c,d,f,h)}
|
| 45 |
+
function ub(a,b,c,d){a>>>=0;b>>>=0;c>>>=0;d>>>=0;var f=(new Date).getFullYear(),h=new Date(f,0,1),k=new Date(f,6,1);f=h.getTimezoneOffset();var q=k.getTimezoneOffset(),y=Math.max(f,q);u()[a>>>2>>>0]=60*y;r()[b>>>2>>>0]=Number(f!=q);a=v=>v.toLocaleTimeString(void 0,{hour12:!1,timeZoneName:"short"}).split(" ")[1];h=a(h);k=a(k);q<f?(W(h,c,17),W(k,d,17)):(W(h,d,17),W(k,c,17))}var Ac=[];
|
| 46 |
+
function vb(a,b,c){a>>>=0;b>>>=0;c>>>=0;Ac.length=0;for(var d;d=n()[b++>>>0];){var f=105!=d;f&=112!=d;c+=f&&c%8?4:0;Ac.push(112==d?u()[c>>>2>>>0]:106==d?N[c>>>3]:105==d?r()[c>>>2>>>0]:ea()[c>>>3>>>0]);c+=f?8:4}return Rb[a](...Ac)}var wb=()=>{},xb=()=>Date.now();function yb(a,b){return I(Q(a>>>0,b>>>0))}var zb=()=>{U+=1;throw"unwind";};function Ab(){return 4294901760}var Bb;Bb=()=>performance.timeOrigin+performance.now();var Cb=()=>B?require("os").cpus().length:navigator.hardwareConcurrency;
|
| 47 |
+
function Db(){La("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER");return 0}function Eb(a){a>>>=0;var b=n().length;if(a<=b||4294901760<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=(f.min.call(f,4294901760,d+(65536-d%65536)%65536)-g.buffer.byteLength+65535)/65536;try{g.grow(f);m();var h=1;break a}catch(k){}h=void 0}if(h)return!0}return!1}
|
| 48 |
+
var Bc=()=>{La("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER");return 0},Y={},Cc=a=>{a.forEach(b=>{var c=Bc();c&&(Y[c]=b)})};function Fb(){var a=Error().stack.toString().split("\n");"Error"==a[0]&&a.shift();Cc(a);Y.$a=Bc();Y.bb=a;return Y.$a}
|
| 49 |
+
function Gb(a,b,c){a>>>=0;b>>>=0;if(Y.$a==a)var d=Y.bb;else d=Error().stack.toString().split("\n"),"Error"==d[0]&&d.shift(),Cc(d);for(var f=3;d[f]&&Bc()!=a;)++f;for(a=0;a<c&&d[a+f];++a)r()[b+4*a>>>2>>>0]=Bc();return a}
|
| 50 |
+
var Dc={},Fc=()=>{if(!Ec){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:la||"./this.program"},b;for(b in Dc)void 0===Dc[b]?delete a[b]:a[b]=Dc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ec=c}return Ec},Ec;
|
| 51 |
+
function Hb(a,b){if(C)return V(18,1,a,b);a>>>=0;b>>>=0;var c=0;Fc().forEach((d,f)=>{var h=b+c;f=u()[a+4*f>>>2>>>0]=h;for(h=0;h<d.length;++h)aa()[f++>>>0]=d.charCodeAt(h);aa()[f>>>0]=0;c+=d.length+1});return 0}function Ib(a,b){if(C)return V(19,1,a,b);a>>>=0;b>>>=0;var c=Fc();u()[a>>>2>>>0]=c.length;var d=0;c.forEach(f=>d+=f.length+1);u()[b>>>2>>>0]=d;return 0}function Kb(a){return C?V(20,1,a):52}function Lb(a,b,c,d){return C?V(21,1,a,b,c,d):52}function Mb(a,b,c,d){return C?V(22,1,a,b,c,d):70}
|
| 52 |
+
var Gc=[null,[],[]];function Nb(a,b,c,d){if(C)return V(23,1,a,b,c,d);b>>>=0;c>>>=0;d>>>=0;for(var f=0,h=0;h<c;h++){var k=u()[b>>>2>>>0],q=u()[b+4>>>2>>>0];b+=8;for(var y=0;y<q;y++){var v=n()[k+y>>>0],z=Gc[a];0===v||10===v?((1===a?ra:I)(sc(z,0)),z.length=0):z.push(v)}f+=q}u()[d>>>2>>>0]=f;return 0}var Hc=[31,29,31,30,31,30,31,31,30,31,30,31],Ic=[31,28,31,30,31,30,31,31,30,31,30,31];function Jc(a){var b=Array(tc(a)+1);uc(a,b,0,b.length);return b}var Kc=(a,b)=>{aa().set(a,b>>>0)};
|
| 53 |
+
function Pb(a,b,c,d){function f(e,p,t){for(e="number"==typeof e?e.toString():e||"";e.length<p;)e=t[0]+e;return e}function h(e,p){return f(e,p,"0")}function k(e,p){function t(Xb){return 0>Xb?-1:0<Xb?1:0}var J;0===(J=t(e.getFullYear()-p.getFullYear()))&&0===(J=t(e.getMonth()-p.getMonth()))&&(J=t(e.getDate()-p.getDate()));return J}function q(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),
|
| 54 |
+
0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function y(e){var p=e.Sa;for(e=new Date((new Date(e.Ta+1900,0,1)).getTime());0<p;){var t=e.getMonth(),J=(X(e.getFullYear())?Hc:Ic)[t];if(p>J-e.getDate())p-=J-e.getDate()+1,e.setDate(1),11>t?e.setMonth(t+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1));else{e.setDate(e.getDate()+p);break}}t=new Date(e.getFullYear()+1,0,4);p=q(new Date(e.getFullYear(),
|
| 55 |
+
0,4));t=q(t);return 0>=k(p,e)?0>=k(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}a>>>=0;b>>>=0;c>>>=0;d>>>=0;var v=u()[d+40>>>2>>>0];d={gb:r()[d>>>2>>>0],fb:r()[d+4>>>2>>>0],Va:r()[d+8>>>2>>>0],Ya:r()[d+12>>>2>>>0],Wa:r()[d+16>>>2>>>0],Ta:r()[d+20>>>2>>>0],Qa:r()[d+24>>>2>>>0],Sa:r()[d+28>>>2>>>0],nb:r()[d+32>>>2>>>0],eb:r()[d+36>>>2>>>0],hb:v?Q(v):""};c=Q(c);v={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y",
|
| 56 |
+
"%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var z in v)c=c.replace(new RegExp(z,"g"),v[z]);var Yb="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),Zb="January February March April May June July August September October November December".split(" ");v={"%a":e=>Yb[e.Qa].substring(0,3),
|
| 57 |
+
"%A":e=>Yb[e.Qa],"%b":e=>Zb[e.Wa].substring(0,3),"%B":e=>Zb[e.Wa],"%C":e=>h((e.Ta+1900)/100|0,2),"%d":e=>h(e.Ya,2),"%e":e=>f(e.Ya,2," "),"%g":e=>y(e).toString().substring(2),"%G":y,"%H":e=>h(e.Va,2),"%I":e=>{e=e.Va;0==e?e=12:12<e&&(e-=12);return h(e,2)},"%j":e=>{for(var p=0,t=0;t<=e.Wa-1;p+=(X(e.Ta+1900)?Hc:Ic)[t++]);return h(e.Ya+p,3)},"%m":e=>h(e.Wa+1,2),"%M":e=>h(e.fb,2),"%n":()=>"\n","%p":e=>0<=e.Va&&12>e.Va?"AM":"PM","%S":e=>h(e.gb,2),"%t":()=>"\t","%u":e=>e.Qa||7,"%U":e=>h(Math.floor((e.Sa+
|
| 58 |
+
7-e.Qa)/7),2),"%V":e=>{var p=Math.floor((e.Sa+7-(e.Qa+6)%7)/7);2>=(e.Qa+371-e.Sa-2)%7&&p++;if(p)53==p&&(t=(e.Qa+371-e.Sa)%7,4==t||3==t&&X(e.Ta)||(p=1));else{p=52;var t=(e.Qa+7-e.Sa-1)%7;(4==t||5==t&&X(e.Ta%400-1))&&p++}return h(p,2)},"%w":e=>e.Qa,"%W":e=>h(Math.floor((e.Sa+7-(e.Qa+6)%7)/7),2),"%y":e=>(e.Ta+1900).toString().substring(2),"%Y":e=>e.Ta+1900,"%z":e=>{e=e.eb;var p=0<=e;e=Math.abs(e)/60;return(p?"+":"-")+String("0000"+(e/60*100+e%60)).slice(-4)},"%Z":e=>e.hb,"%%":()=>"%"};c=c.replace(/%%/g,
|
| 59 |
+
"\x00\x00");for(z in v)c.includes(z)&&(c=c.replace(new RegExp(z,"g"),v[z](d)));c=c.replace(/\0\0/g,"%");z=Jc(c);if(z.length>b)return 0;Kc(z,a);return z.length-1}function Qb(a,b,c,d){return Pb(a>>>0,b>>>0,c>>>0,d>>>0)}C||fc();
|
| 60 |
+
var xc=[Ob,dc,qc,Wa,Xa,Ya,Za,$a,ab,bb,cb,db,eb,fb,gb,hb,sb,tb,Hb,Ib,Kb,Lb,Mb,Nb],Sa,Z=function(){function a(c,d){Z=c.exports;Z=Lc();ec.push(Z.Ea);mc=Z.Fa;Ha.unshift(Z.$);Ea=d;Ka();return Z}var b=va();O++;if(w.instantiateWasm)try{return w.instantiateWasm(b,a)}catch(c){I(`Module.instantiateWasm callback failed with error: ${c}`),x(c)}Na||=w.locateFile?Ma("ort-wasm-simd-threaded.wasm")?"ort-wasm-simd-threaded.wasm":w.locateFile?w.locateFile("ort-wasm-simd-threaded.wasm",F):F+"ort-wasm-simd-threaded.wasm":
|
| 61 |
+
(new URL("ort-wasm-simd-threaded.wasm",import.meta.url)).href;Ra(b,function(c){a(c.instance,c.module)}).catch(x);return{}}();w._OrtInit=(a,b)=>(w._OrtInit=Z.aa)(a,b);w._OrtGetLastError=(a,b)=>(w._OrtGetLastError=Z.ba)(a,b);w._OrtCreateSessionOptions=(a,b,c,d,f,h,k,q,y,v)=>(w._OrtCreateSessionOptions=Z.ca)(a,b,c,d,f,h,k,q,y,v);w._OrtAppendExecutionProvider=(a,b)=>(w._OrtAppendExecutionProvider=Z.da)(a,b);w._OrtAddFreeDimensionOverride=(a,b,c)=>(w._OrtAddFreeDimensionOverride=Z.ea)(a,b,c);
|
| 62 |
+
w._OrtAddSessionConfigEntry=(a,b,c)=>(w._OrtAddSessionConfigEntry=Z.fa)(a,b,c);w._OrtReleaseSessionOptions=a=>(w._OrtReleaseSessionOptions=Z.ga)(a);w._OrtCreateSession=(a,b,c)=>(w._OrtCreateSession=Z.ha)(a,b,c);w._OrtReleaseSession=a=>(w._OrtReleaseSession=Z.ia)(a);w._OrtGetInputOutputCount=(a,b,c)=>(w._OrtGetInputOutputCount=Z.ja)(a,b,c);w._OrtGetInputName=(a,b)=>(w._OrtGetInputName=Z.ka)(a,b);w._OrtGetOutputName=(a,b)=>(w._OrtGetOutputName=Z.la)(a,b);w._OrtFree=a=>(w._OrtFree=Z.ma)(a);
|
| 63 |
+
w._OrtCreateTensor=(a,b,c,d,f,h)=>(w._OrtCreateTensor=Z.na)(a,b,c,d,f,h);w._OrtGetTensorData=(a,b,c,d,f)=>(w._OrtGetTensorData=Z.oa)(a,b,c,d,f);w._OrtReleaseTensor=a=>(w._OrtReleaseTensor=Z.pa)(a);w._OrtCreateRunOptions=(a,b,c,d)=>(w._OrtCreateRunOptions=Z.qa)(a,b,c,d);w._OrtAddRunConfigEntry=(a,b,c)=>(w._OrtAddRunConfigEntry=Z.ra)(a,b,c);w._OrtReleaseRunOptions=a=>(w._OrtReleaseRunOptions=Z.sa)(a);w._OrtCreateBinding=a=>(w._OrtCreateBinding=Z.ta)(a);
|
| 64 |
+
w._OrtBindInput=(a,b,c)=>(w._OrtBindInput=Z.ua)(a,b,c);w._OrtBindOutput=(a,b,c,d)=>(w._OrtBindOutput=Z.va)(a,b,c,d);w._OrtClearBoundOutputs=a=>(w._OrtClearBoundOutputs=Z.wa)(a);w._OrtReleaseBinding=a=>(w._OrtReleaseBinding=Z.xa)(a);w._OrtRunWithBinding=(a,b,c,d,f)=>(w._OrtRunWithBinding=Z.ya)(a,b,c,d,f);w._OrtRun=(a,b,c,d,f,h,k,q)=>(w._OrtRun=Z.za)(a,b,c,d,f,h,k,q);w._OrtEndProfiling=a=>(w._OrtEndProfiling=Z.Aa)(a);var K=()=>(K=Z.Ba)();w._malloc=a=>(w._malloc=Z.Ca)(a);w._free=a=>(w._free=Z.Da)(a);
|
| 65 |
+
var wa=(a,b,c,d,f,h)=>(wa=Z.Ga)(a,b,c,d,f,h),Da=()=>(Da=Z.Ha)(),bc=(a,b,c,d,f)=>(bc=Z.Ia)(a,b,c,d,f),hc=a=>(hc=Z.Ja)(a),Ba=a=>(Ba=Z.Ka)(a),vc=()=>(vc=Z.La)(),kc=(a,b)=>(kc=Z.Ma)(a,b),cc=a=>(cc=Z.Na)(a),ac=a=>(ac=Z.Oa)(a),$b=()=>($b=Z.Pa)();w.___start_em_js=822690;w.___stop_em_js=822751;
|
| 66 |
+
function Lc(){var a=Z;a=Object.assign({},a);var b=d=>()=>d()>>>0,c=d=>f=>d(f)>>>0;a.Ba=b(a.Ba);a.Ca=c(a.Ca);a.emscripten_main_runtime_thread_id=b(a.emscripten_main_runtime_thread_id);a.Oa=c(a.Oa);a.Pa=b(a.Pa);return a}w.stackSave=()=>$b();w.stackRestore=a=>cc(a);w.stackAlloc=a=>ac(a);w.UTF8ToString=Q;w.stringToUTF8=W;w.lengthBytesUTF8=tc;var Mc;P=function Nc(){Mc||Oc();Mc||(P=Nc)};
|
| 67 |
+
function Oc(){0<O||(C?(ha(w),C||jc(Ha),startWorker(w)):(jc(Ga),0<O||Mc||(Mc=!0,w.calledRun=!0,Fa||(C||jc(Ha),ha(w),C||jc(Ia)))))}Oc();moduleRtn=ia;
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
return moduleRtn;
|
| 71 |
+
}
|
| 72 |
+
);
|
| 73 |
+
})();
|
| 74 |
+
export default ortWasmThreaded;
|
| 75 |
+
var isPthread = globalThis.self?.name === 'em-pthread';
|
| 76 |
+
var isNode = typeof globalThis.process?.versions?.node == 'string';
|
| 77 |
+
if (isNode) isPthread = (await import('worker_threads')).workerData === 'em-pthread';
|
| 78 |
+
|
| 79 |
+
// When running as a pthread, construct a new instance on startup
|
| 80 |
+
isPthread && ortWasmThreaded();
|
frontend/vendor/onnx/ort-wasm-simd-threaded.wasm
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1bf0b9ed7ad025cf9ca88ce6da29e54df3f128a169f8241d71823e81f078d578
|
| 3 |
+
size 11018731
|
frontend/vendor/onnx/ort.wasm.min.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* ONNX Runtime Web v1.19.2
|
| 3 |
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
| 4 |
+
* Licensed under the MIT License.
|
| 5 |
+
*/
|
| 6 |
+
"use strict";var ort=(()=>{var Ne=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var Or=Object.prototype.hasOwnProperty;var We=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var me=(t,e)=>{for(var r in e)Ne(t,r,{get:e[r],enumerable:!0})},vr=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ar(e))!Or.call(t,n)&&n!==r&&Ne(t,n,{get:()=>e[n],enumerable:!(o=Tr(e,n))||o.enumerable});return t};var $e=t=>vr(Ne({},"__esModule",{value:!0}),t);var he,$,q,xr,ye,we=w(()=>{"use strict";he=new Map,$=[],q=(t,e,r)=>{if(e&&typeof e.init=="function"&&typeof e.createInferenceSessionHandler=="function"){let o=he.get(t);if(o===void 0)he.set(t,{backend:e,priority:r});else{if(o.priority>r)return;if(o.priority===r&&o.backend!==e)throw new Error(`cannot register backend "${t}" using priority ${r}`)}if(r>=0){let n=$.indexOf(t);n!==-1&&$.splice(n,1);for(let a=0;a<$.length;a++)if(he.get($[a]).priority<=r){$.splice(a,0,t);return}$.push(t)}return}throw new TypeError("not a valid backend")},xr=async t=>{let e=he.get(t);if(!e)return"backend not found.";if(e.initialized)return e.backend;if(e.aborted)return e.error;{let r=!!e.initPromise;try{return r||(e.initPromise=e.backend.init(t)),await e.initPromise,e.initialized=!0,e.backend}catch(o){return r||(e.error=`${o}`,e.aborted=!0),e.error}finally{delete e.initPromise}}},ye=async t=>{let e=t.executionProviders||[],r=e.map(i=>typeof i=="string"?i:i.name),o=r.length===0?$:r,n,a=[],s=new Set;for(let i of o){let u=await xr(i);typeof u=="string"?a.push({name:i,err:u}):(n||(n=u),n===u&&s.add(i))}if(!n)throw new Error(`no available backend found. ERR: ${a.map(i=>`[${i.name}] ${i.err}`).join(", ")}`);for(let{name:i,err:u}of a)r.includes(i)&&console.warn(`removing requested execution provider "${i}" from session options because it is not available: ${u}`);let f=e.filter(i=>s.has(typeof i=="string"?i:i.name));return[n,new Proxy(t,{get:(i,u)=>u==="executionProviders"?f:Reflect.get(i,u)})]}});var ft=w(()=>{"use strict";we()});var ct,dt=w(()=>{"use strict";ct="1.19.2"});var lt,U,Ge=w(()=>{"use strict";dt();lt="warning",U={wasm:{},webgl:{},webgpu:{},versions:{common:ct},set logLevel(t){if(t!==void 0){if(typeof t!="string"||["verbose","info","warning","error","fatal"].indexOf(t)===-1)throw new Error(`Unsupported logging level: ${t}`);lt=t}},get logLevel(){return lt}};Object.defineProperty(U,"logLevel",{enumerable:!0})});var S,pt=w(()=>{"use strict";Ge();S=U});var mt,ht,yt=w(()=>{"use strict";mt=(t,e)=>{let r=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);r.width=t.dims[3],r.height=t.dims[2];let o=r.getContext("2d");if(o!=null){let n,a;e?.tensorLayout!==void 0&&e.tensorLayout==="NHWC"?(n=t.dims[2],a=t.dims[3]):(n=t.dims[3],a=t.dims[2]);let s=e?.format!==void 0?e.format:"RGB",f=e?.norm,i,u;f===void 0||f.mean===void 0?i=[255,255,255,255]:typeof f.mean=="number"?i=[f.mean,f.mean,f.mean,f.mean]:(i=[f.mean[0],f.mean[1],f.mean[2],0],f.mean[3]!==void 0&&(i[3]=f.mean[3])),f===void 0||f.bias===void 0?u=[0,0,0,0]:typeof f.bias=="number"?u=[f.bias,f.bias,f.bias,f.bias]:(u=[f.bias[0],f.bias[1],f.bias[2],0],f.bias[3]!==void 0&&(u[3]=f.bias[3]));let l=a*n,d=0,c=l,p=l*2,m=-1;s==="RGBA"?(d=0,c=l,p=l*2,m=l*3):s==="RGB"?(d=0,c=l,p=l*2):s==="RBG"&&(d=0,p=l,c=l*2);for(let y=0;y<a;y++)for(let b=0;b<n;b++){let T=(t.data[d++]-u[0])*i[0],h=(t.data[c++]-u[1])*i[1],g=(t.data[p++]-u[2])*i[2],O=m===-1?255:(t.data[m++]-u[3])*i[3];o.fillStyle="rgba("+T+","+h+","+g+","+O+")",o.fillRect(b,y,1,1)}if("toDataURL"in r)return r.toDataURL();throw new Error("toDataURL is not supported")}else throw new Error("Can not access image data")},ht=(t,e)=>{let r=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d"),o;if(r!=null){let n,a,s;e?.tensorLayout!==void 0&&e.tensorLayout==="NHWC"?(n=t.dims[2],a=t.dims[1],s=t.dims[3]):(n=t.dims[3],a=t.dims[2],s=t.dims[1]);let f=e!==void 0&&e.format!==void 0?e.format:"RGB",i=e?.norm,u,l;i===void 0||i.mean===void 0?u=[255,255,255,255]:typeof i.mean=="number"?u=[i.mean,i.mean,i.mean,i.mean]:(u=[i.mean[0],i.mean[1],i.mean[2],255],i.mean[3]!==void 0&&(u[3]=i.mean[3])),i===void 0||i.bias===void 0?l=[0,0,0,0]:typeof i.bias=="number"?l=[i.bias,i.bias,i.bias,i.bias]:(l=[i.bias[0],i.bias[1],i.bias[2],0],i.bias[3]!==void 0&&(l[3]=i.bias[3]));let d=a*n;if(e!==void 0&&(e.format!==void 0&&s===4&&e.format!=="RGBA"||s===3&&e.format!=="RGB"&&e.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");let c=4,p=0,m=1,y=2,b=3,T=0,h=d,g=d*2,O=-1;f==="RGBA"?(T=0,h=d,g=d*2,O=d*3):f==="RGB"?(T=0,h=d,g=d*2):f==="RBG"&&(T=0,g=d,h=d*2),o=r.createImageData(n,a);for(let B=0;B<a*n;p+=c,m+=c,y+=c,b+=c,B++)o.data[p]=(t.data[T++]-l[0])*u[0],o.data[m]=(t.data[h++]-l[1])*u[1],o.data[y]=(t.data[g++]-l[2])*u[2],o.data[b]=O===-1?255:(t.data[O++]-l[3])*u[3]}else throw new Error("Can not access image data");return o}});var ze,wt,gt,bt,Et,St=w(()=>{"use strict";ge();ze=(t,e)=>{if(t===void 0)throw new Error("Image buffer must be defined");if(e.height===void 0||e.width===void 0)throw new Error("Image height and width must be defined");if(e.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");let{height:r,width:o}=e,n=e.norm??{mean:255,bias:0},a,s;typeof n.mean=="number"?a=[n.mean,n.mean,n.mean,n.mean]:a=[n.mean[0],n.mean[1],n.mean[2],n.mean[3]??255],typeof n.bias=="number"?s=[n.bias,n.bias,n.bias,n.bias]:s=[n.bias[0],n.bias[1],n.bias[2],n.bias[3]??0];let f=e.format!==void 0?e.format:"RGBA",i=e.tensorFormat!==void 0&&e.tensorFormat!==void 0?e.tensorFormat:"RGB",u=r*o,l=i==="RGBA"?new Float32Array(u*4):new Float32Array(u*3),d=4,c=0,p=1,m=2,y=3,b=0,T=u,h=u*2,g=-1;f==="RGB"&&(d=3,c=0,p=1,m=2,y=-1),i==="RGBA"?g=u*3:i==="RBG"?(b=0,h=u,T=u*2):i==="BGR"&&(h=0,T=u,b=u*2);for(let B=0;B<u;B++,c+=d,m+=d,p+=d,y+=d)l[b++]=(t[c]+s[0])/a[0],l[T++]=(t[p]+s[1])/a[1],l[h++]=(t[m]+s[2])/a[2],g!==-1&&y!==-1&&(l[g++]=(t[y]+s[3])/a[3]);return i==="RGBA"?new P("float32",l,[1,4,r,o]):new P("float32",l,[1,3,r,o])},wt=async(t,e)=>{let r=typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement,o=typeof ImageData<"u"&&t instanceof ImageData,n=typeof ImageBitmap<"u"&&t instanceof ImageBitmap,a=typeof t=="string",s,f=e??{},i=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},u=l=>l instanceof HTMLCanvasElement||l instanceof OffscreenCanvas?l.getContext("2d"):null;if(r){let l=i();l.width=t.width,l.height=t.height;let d=u(l);if(d!=null){let c=t.height,p=t.width;if(e!==void 0&&e.resizedHeight!==void 0&&e.resizedWidth!==void 0&&(c=e.resizedHeight,p=e.resizedWidth),e!==void 0){if(f=e,e.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");f.tensorFormat="RGBA",f.height=c,f.width=p}else f.tensorFormat="RGBA",f.height=c,f.width=p;d.drawImage(t,0,0),s=d.getImageData(0,0,p,c).data}else throw new Error("Can not access image data")}else if(o){let l,d;if(e!==void 0&&e.resizedWidth!==void 0&&e.resizedHeight!==void 0?(l=e.resizedHeight,d=e.resizedWidth):(l=t.height,d=t.width),e!==void 0&&(f=e),f.format="RGBA",f.height=l,f.width=d,e!==void 0){let c=i();c.width=d,c.height=l;let p=u(c);if(p!=null)p.putImageData(t,0,0),s=p.getImageData(0,0,d,l).data;else throw new Error("Can not access image data")}else s=t.data}else if(n){if(e===void 0)throw new Error("Please provide image config with format for Imagebitmap");let l=i();l.width=t.width,l.height=t.height;let d=u(l);if(d!=null){let c=t.height,p=t.width;return d.drawImage(t,0,0,p,c),s=d.getImageData(0,0,p,c).data,f.height=c,f.width=p,ze(s,f)}else throw new Error("Can not access image data")}else{if(a)return new Promise((l,d)=>{let c=i(),p=u(c);if(!t||!p)return d();let m=new Image;m.crossOrigin="Anonymous",m.src=t,m.onload=()=>{c.width=m.width,c.height=m.height,p.drawImage(m,0,0,c.width,c.height);let y=p.getImageData(0,0,c.width,c.height);f.height=c.height,f.width=c.width,l(ze(y.data,f))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(s!==void 0)return ze(s,f);throw new Error("Input data provided is not supported - aborted tensor creation")},gt=(t,e)=>{let{width:r,height:o,download:n,dispose:a}=e,s=[1,o,r,4];return new P({location:"texture",type:"float32",texture:t,dims:s,download:n,dispose:a})},bt=(t,e)=>{let{dataType:r,dims:o,download:n,dispose:a}=e;return new P({location:"gpu-buffer",type:r??"float32",gpuBuffer:t,dims:o,download:n,dispose:a})},Et=(t,e,r)=>new P({location:"cpu-pinned",type:t,data:e,dims:r??[e.length]})});var G,oe,Tt,At,Ot=w(()=>{"use strict";G=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array]]),oe=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),Tt=!1,At=()=>{if(!Tt){Tt=!0;let t=typeof BigInt64Array<"u"&&BigInt64Array.from,e=typeof BigUint64Array<"u"&&BigUint64Array.from,r=typeof Float16Array<"u"&&Float16Array.from;t&&(G.set("int64",BigInt64Array),oe.set(BigInt64Array,"int64")),e&&(G.set("uint64",BigUint64Array),oe.set(BigUint64Array,"uint64")),r?(G.set("float16",Float16Array),oe.set(Float16Array,"float16")):G.set("float16",Uint16Array)}}});var vt,xt,It=w(()=>{"use strict";ge();vt=t=>{let e=1;for(let r=0;r<t.length;r++){let o=t[r];if(typeof o!="number"||!Number.isSafeInteger(o))throw new TypeError(`dims[${r}] must be an integer, got: ${o}`);if(o<0)throw new RangeError(`dims[${r}] must be a non-negative integer, got: ${o}`);e*=o}return e},xt=(t,e)=>{switch(t.location){case"cpu":return new P(t.type,t.data,e);case"cpu-pinned":return new P({location:"cpu-pinned",data:t.data,type:t.type,dims:e});case"texture":return new P({location:"texture",texture:t.texture,type:t.type,dims:e});case"gpu-buffer":return new P({location:"gpu-buffer",gpuBuffer:t.gpuBuffer,type:t.type,dims:e});default:throw new Error(`tensorReshape: tensor location ${t.location} is not supported`)}}});var P,ge=w(()=>{"use strict";yt();St();Ot();It();P=class{constructor(e,r,o){At();let n,a;if(typeof e=="object"&&"location"in e)switch(this.dataLocation=e.location,n=e.type,a=e.dims,e.location){case"cpu-pinned":{let f=G.get(n);if(!f)throw new TypeError(`unsupported type "${n}" to create tensor from pinned buffer`);if(!(e.data instanceof f))throw new TypeError(`buffer should be of type ${f.name}`);this.cpuData=e.data;break}case"texture":{if(n!=="float32")throw new TypeError(`unsupported type "${n}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break}case"gpu-buffer":{if(n!=="float32"&&n!=="float16"&&n!=="int32"&&n!=="int64"&&n!=="uint32"&&n!=="uint8"&&n!=="bool")throw new TypeError(`unsupported type "${n}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let f,i;if(typeof e=="string")if(n=e,i=o,e==="string"){if(!Array.isArray(r))throw new TypeError("A string tensor's data must be a string array.");f=r}else{let u=G.get(e);if(u===void 0)throw new TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(r)){if(e==="float16"&&u===Uint16Array)throw new TypeError("Creating a float16 tensor from number array is not supported. Please use Uint16Array as data.");e==="uint64"||e==="int64"?f=u.from(r,BigInt):f=u.from(r)}else if(r instanceof u)f=r;else throw new TypeError(`A ${n} tensor's data must be type of ${u}`)}else if(i=r,Array.isArray(e)){if(e.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");let u=typeof e[0];if(u==="string")n="string",f=e;else if(u==="boolean")n="bool",f=Uint8Array.from(e);else throw new TypeError(`Invalid element type of data array: ${u}.`)}else{let u=oe.get(e.constructor);if(u===void 0)throw new TypeError(`Unsupported type for tensor data: ${e.constructor}.`);n=u,f=e}if(i===void 0)i=[f.length];else if(!Array.isArray(i))throw new TypeError("A tensor's dims must be a number array");a=i,this.cpuData=f,this.dataLocation="cpu"}let s=vt(a);if(this.cpuData&&s!==this.cpuData.length)throw new Error(`Tensor's size(${s}) does not match data length(${this.cpuData.length}).`);this.type=n,this.dims=a,this.size=s}static async fromImage(e,r){return wt(e,r)}static fromTexture(e,r){return gt(e,r)}static fromGpuBuffer(e,r){return bt(e,r)}static fromPinnedBuffer(e,r,o){return Et(e,r,o)}toDataURL(e){return mt(this,e)}toImageData(e){return ht(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}async getData(e){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let r=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=r,e&&this.disposer&&(this.disposer(),this.disposer=void 0),r}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return xt(this,e)}}});var I,be=w(()=>{"use strict";ge();I=P});var He,Pt,F,N,je=w(()=>{"use strict";Ge();He=(t,e)=>{(typeof U.trace>"u"?!U.wasm.trace:!U.trace)||console.timeStamp(`${t}::ORT::${e}`)},Pt=(t,e)=>{let r=new Error().stack?.split(/\r\n|\r|\n/g)||[],o=!1;for(let n=0;n<r.length;n++){if(o&&!r[n].includes("TRACE_FUNC")){let a=`FUNC_${t}::${r[n].trim().split(" ")[1]}`;e&&(a+=`::${e}`),He("CPU",a);return}r[n].includes("TRACE_FUNC")&&(o=!0)}},F=t=>{(typeof U.trace>"u"?!U.wasm.trace:!U.trace)||Pt("BEGIN",t)},N=t=>{(typeof U.trace>"u"?!U.wasm.trace:!U.trace)||Pt("END",t)}});var Ee,Bt=w(()=>{"use strict";we();be();je();Ee=class t{constructor(e){this.handler=e}async run(e,r,o){F();let n={},a={};if(typeof e!="object"||e===null||e instanceof I||Array.isArray(e))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if(typeof r=="object"){if(r===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(r instanceof I)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(r)){if(r.length===0)throw new TypeError("'fetches' cannot be an empty array.");s=!1;for(let u of r){if(typeof u!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(u)===-1)throw new RangeError(`'fetches' contains invalid output name: ${u}.`);n[u]=null}if(typeof o=="object"&&o!==null)a=o;else if(typeof o<"u")throw new TypeError("'options' must be an object.")}else{let u=!1,l=Object.getOwnPropertyNames(r);for(let d of this.outputNames)if(l.indexOf(d)!==-1){let c=r[d];(c===null||c instanceof I)&&(u=!0,s=!1,n[d]=c)}if(u){if(typeof o=="object"&&o!==null)a=o;else if(typeof o<"u")throw new TypeError("'options' must be an object.")}else a=r}}else if(typeof r<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let u of this.inputNames)if(typeof e[u]>"u")throw new Error(`input '${u}' is missing in 'feeds'.`);if(s)for(let u of this.outputNames)n[u]=null;let f=await this.handler.run(e,n,a),i={};for(let u in f)if(Object.hasOwnProperty.call(f,u)){let l=f[u];l instanceof I?i[u]=l:i[u]=new I(l.type,l.data,l.dims)}return N(),i}async release(){return this.handler.dispose()}static async create(e,r,o,n){F();let a,s={};if(typeof e=="string"){if(a=e,typeof r=="object"&&r!==null)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(e instanceof Uint8Array){if(a=e,typeof r=="object"&&r!==null)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer){let l=e,d=0,c=e.byteLength;if(typeof r=="object"&&r!==null)s=r;else if(typeof r=="number"){if(d=r,!Number.isSafeInteger(d))throw new RangeError("'byteOffset' must be an integer.");if(d<0||d>=l.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${l.byteLength}).`);if(c=e.byteLength-d,typeof o=="number"){if(c=o,!Number.isSafeInteger(c))throw new RangeError("'byteLength' must be an integer.");if(c<=0||d+c>l.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${l.byteLength-d}].`);if(typeof n=="object"&&n!==null)s=n;else if(typeof n<"u")throw new TypeError("'options' must be an object.")}else if(typeof o<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof r<"u")throw new TypeError("'options' must be an object.");a=new Uint8Array(l,d,c)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");let[f,i]=await ye(s),u=await f.createInferenceSessionHandler(a,i);return N(),new t(u)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}}});var Lt,Ct=w(()=>{"use strict";Bt();Lt=Ee});var Ut=w(()=>{"use strict"});var Mt=w(()=>{"use strict"});var Dt=w(()=>{"use strict"});var Rt=w(()=>{"use strict"});var Ir,Se,_t=w(()=>{"use strict";we();be();Ir="Training backend could not be resolved. Make sure you're using the correct configuration & WebAssembly files.",Se=class t{constructor(e,r,o){this.handler=e,this.hasOptimizerModel=r,this.hasEvalModel=o}get trainingInputNames(){return this.handler.inputNames}get trainingOutputNames(){return this.handler.outputNames}get evalInputNames(){if(this.hasEvalModel)return this.handler.evalInputNames;throw new Error("This training session has no evalModel loaded.")}get evalOutputNames(){if(this.hasEvalModel)return this.handler.evalOutputNames;throw new Error("This training session has no evalModel loaded.")}static async create(e,r){let o=e.evalModel||"",n=e.optimizerModel||"",a=r||{},[s,f]=await ye(a);if(s.createTrainingSessionHandler){let i=await s.createTrainingSessionHandler(e.checkpointState,e.trainModel,o,n,f);return new t(i,!!e.optimizerModel,!!e.evalModel)}else throw new Error(Ir)}typeNarrowingForRunStep(e,r,o,n,a){let s={},f={};if(typeof o!="object"||o===null||o instanceof I||Array.isArray(o))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let i=!0;if(typeof n=="object"){if(n===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(n instanceof I)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(n)){if(n.length===0)throw new TypeError("'fetches' cannot be an empty array.");i=!1;for(let u of n){if(typeof u!="string")throw new TypeError("'fetches' must be a string array or an object.");if(r.indexOf(u)===-1)throw new RangeError(`'fetches' contains invalid output name: ${u}.`);s[u]=null}if(typeof a=="object"&&a!==null)f=a;else if(typeof a<"u")throw new TypeError("'options' must be an object.")}else{let u=!1,l=Object.getOwnPropertyNames(n);for(let d of r)if(l.indexOf(d)!==-1){let c=n[d];(c===null||c instanceof I)&&(u=!0,i=!1,s[d]=c)}if(u){if(typeof a=="object"&&a!==null)f=a;else if(typeof a<"u")throw new TypeError("'options' must be an object.")}else f=n}}else if(typeof n<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let u of e)if(typeof o[u]>"u")throw new Error(`input '${u}' is missing in 'feeds'.`);if(i)for(let u of r)s[u]=null;return[s,f]}convertHandlerReturnTypeToMapOfTensors(e){let r={};for(let o in e)if(Object.hasOwnProperty.call(e,o)){let n=e[o];n instanceof I?r[o]=n:r[o]=new I(n.type,n.data,n.dims)}return r}async lazyResetGrad(){await this.handler.lazyResetGrad()}async runTrainStep(e,r,o){let[n,a]=this.typeNarrowingForRunStep(this.trainingInputNames,this.trainingOutputNames,e,r,o),s=await this.handler.runTrainStep(e,n,a);return this.convertHandlerReturnTypeToMapOfTensors(s)}async runOptimizerStep(e){if(this.hasOptimizerModel)await this.handler.runOptimizerStep(e||{});else throw new Error("This TrainingSession has no OptimizerModel loaded.")}async runEvalStep(e,r,o){if(this.hasEvalModel){let[n,a]=this.typeNarrowingForRunStep(this.evalInputNames,this.evalOutputNames,e,r,o),s=await this.handler.runEvalStep(e,n,a);return this.convertHandlerReturnTypeToMapOfTensors(s)}else throw new Error("This TrainingSession has no EvalModel loaded.")}async getParametersSize(e=!0){return this.handler.getParametersSize(e)}async loadParametersBuffer(e,r=!0){let o=await this.getParametersSize(r);if(e.length!==4*o)throw new Error("Size of the buffer passed into loadParametersBuffer must match the number of parameters in the model. Please use getParametersSize method to check.");return this.handler.loadParametersBuffer(e,r)}async getContiguousParameters(e=!0){return this.handler.getContiguousParameters(e)}async release(){return this.handler.dispose()}}});var kt,Ft=w(()=>{"use strict";_t();kt=Se});var Ve={};me(Ve,{InferenceSession:()=>Lt,TRACE:()=>He,TRACE_FUNC_BEGIN:()=>F,TRACE_FUNC_END:()=>N,Tensor:()=>I,TrainingSession:()=>kt,env:()=>S,registerBackend:()=>q});var z=w(()=>{"use strict";ft();pt();Ct();be();Ut();Mt();je();Dt();Rt();Ft()});var Te=w(()=>{"use strict"});var Gt={};me(Gt,{default:()=>Pr});var Wt,$t,Pr,zt=w(()=>{"use strict";Ye();H();se();Wt="ort-wasm-proxy-worker",$t=globalThis.self?.name===Wt;$t&&(self.onmessage=t=>{let{type:e,in:r}=t.data;try{switch(e){case"init-wasm":Ae(r.wasm).then(()=>{Oe(r).then(()=>{postMessage({type:e})},o=>{postMessage({type:e,err:o})})},o=>{postMessage({type:e,err:o})});break;case"init-ep":{let{epName:o,env:n}=r;ve(n,o).then(()=>{postMessage({type:e})},a=>{postMessage({type:e,err:a})});break}case"copy-from":{let{buffer:o}=r,n=ae(o);postMessage({type:e,out:n});break}case"create":{let{model:o,options:n}=r;xe(o,n).then(a=>{postMessage({type:e,out:a})},a=>{postMessage({type:e,err:a})});break}case"release":Ie(r),postMessage({type:e});break;case"run":{let{sessionId:o,inputIndices:n,inputs:a,outputIndices:s,options:f}=r;Pe(o,n,a,s,new Array(s.length).fill(null),f).then(i=>{i.some(u=>u[3]!=="cpu")?postMessage({type:e,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:e,out:i},Le([...a,...i]))},i=>{postMessage({type:e,err:i})});break}case"end-profiling":Be(r),postMessage({type:e});break;default:}}catch(o){postMessage({type:e,err:o})}});Pr=$t?null:t=>new Worker(t??D,{type:"classic",name:Wt})});var D,Br,jt,Lr,Cr,Vt,Ur,Ht,Yt,qt,se=w(()=>{"use strict";Te();D=!1?void 0:typeof document<"u"?document.currentScript?.src:typeof self<"u"?self.location?.href:void 0,Br=!1||typeof location>"u"?void 0:location.origin,jt=(t,e)=>{try{let r=e??D;return(r?new URL(t,r):new URL(t)).origin===Br}catch{return!1}},Lr=(t,e)=>{let r=e??D;try{return(r?new URL(t,r):new URL(t)).href}catch{return}},Cr=(t,e)=>`${e??"./"}${t}`,Vt=async t=>{let r=await(await fetch(t,{credentials:"same-origin"})).blob();return URL.createObjectURL(r)},Ur=async t=>(await import(/*webpackIgnore:true*/t)).default,Ht=(zt(),$e(Gt)).default,Yt=async()=>{if(!D)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if(jt(D))return[void 0,Ht()];let t=await Vt(D);return[t,Ht(t)]},qt=async(t,e,r)=>{{let o="ort-wasm-simd-threaded.mjs",n=t??Lr(o,e),a=!!1&&r&&n&&!jt(n,e),s=a?await Vt(n):n??Cr(o,e);return[a?s:void 0,await Ur(s)]}}});var qe,Je,Ce,Jt,Mr,Dr,Ae,v,H=w(()=>{"use strict";se();Je=!1,Ce=!1,Jt=!1,Mr=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},Dr=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},Ae=async t=>{if(Je)return Promise.resolve();if(Ce)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(Jt)throw new Error("previous call to 'initializeWebAssembly()' failed.");Ce=!0;let e=t.initTimeout,r=t.numThreads;if(!Dr())throw new Error("WebAssembly SIMD is not supported in the current environment.");let o=Mr();r>1&&!o&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+r+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),t.numThreads=r=1);let n=t.wasmPaths,a=typeof n=="string"?n:void 0,s=n?.mjs,f=s?.href??s,i=n?.wasm,u=i?.href??i,l=t.wasmBinary,[d,c]=await qt(f,a,r>1),p=!1,m=[];if(e>0&&m.push(new Promise(y=>{setTimeout(()=>{p=!0,y()},e)})),m.push(new Promise((y,b)=>{let T={numThreads:r};l?T.wasmBinary=l:(u||a)&&(T.locateFile=(h,g)=>u??(a??g)+h),c(T).then(h=>{Ce=!1,Je=!0,qe=h,y(),d&&URL.revokeObjectURL(d)},h=>{Ce=!1,Jt=!0,b(h)})})),await Promise.race(m),p)throw new Error(`WebAssembly backend initializing failed due to timeout: ${e}ms`)},v=()=>{if(Je&&qe)return qe;throw new Error("WebAssembly is not initialized yet.")}});var x,ie,A,Ue=w(()=>{"use strict";H();x=(t,e)=>{let r=v(),o=r.lengthBytesUTF8(t)+1,n=r._malloc(o);return r.stringToUTF8(t,n,o),e.push(n),n},ie=(t,e,r,o)=>{if(typeof t=="object"&&t!==null){if(r.has(t))throw new Error("Circular reference in options");r.add(t)}Object.entries(t).forEach(([n,a])=>{let s=e?e+n:n;if(typeof a=="object")ie(a,s+".",r,o);else if(typeof a=="string"||typeof a=="number")o(s,a.toString());else if(typeof a=="boolean")o(s,a?"1":"0");else throw new Error(`Can't handle extra config type: ${typeof a}`)})},A=t=>{let e=v(),r=e.stackSave();try{let o=e.stackAlloc(8);e._OrtGetLastError(o,o+4);let n=e.HEAP32[o/4],a=e.HEAPU32[o/4+1],s=a?e.UTF8ToString(a):"";throw new Error(`${t} ERROR_CODE: ${n}, ERROR_MESSAGE: ${s}`)}finally{e.stackRestore(r)}}});var Xt,Kt=w(()=>{"use strict";H();Ue();Xt=t=>{let e=v(),r=0,o=[],n=t||{};try{if(t?.logSeverityLevel===void 0)n.logSeverityLevel=2;else if(typeof t.logSeverityLevel!="number"||!Number.isInteger(t.logSeverityLevel)||t.logSeverityLevel<0||t.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${t.logSeverityLevel}`);if(t?.logVerbosityLevel===void 0)n.logVerbosityLevel=0;else if(typeof t.logVerbosityLevel!="number"||!Number.isInteger(t.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${t.logVerbosityLevel}`);t?.terminate===void 0&&(n.terminate=!1);let a=0;return t?.tag!==void 0&&(a=x(t.tag,o)),r=e._OrtCreateRunOptions(n.logSeverityLevel,n.logVerbosityLevel,!!n.terminate,a),r===0&&A("Can't create run options."),t?.extra!==void 0&&ie(t.extra,"",new WeakSet,(s,f)=>{let i=x(s,o),u=x(f,o);e._OrtAddRunConfigEntry(r,i,u)!==0&&A(`Can't set a run config entry: ${s} - ${f}.`)}),[r,o]}catch(a){throw r!==0&&e._OrtReleaseRunOptions(r),o.forEach(s=>e._free(s)),a}}});var Rr,_r,kr,Fr,Qt,Zt=w(()=>{"use strict";H();Ue();Rr=t=>{switch(t){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${t}`)}},_r=t=>{switch(t){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${t}`)}},kr=t=>{t.extra||(t.extra={}),t.extra.session||(t.extra.session={});let e=t.extra.session;e.use_ort_model_bytes_directly||(e.use_ort_model_bytes_directly="1"),t.executionProviders&&t.executionProviders.some(r=>(typeof r=="string"?r:r.name)==="webgpu")&&(t.enableMemPattern=!1)},Fr=(t,e,r)=>{for(let o of e){let n=typeof o=="string"?o:o.name;switch(n){case"webnn":if(n="WEBNN",typeof o!="string"){let f=o?.deviceType;if(f){let i=x("deviceType",r),u=x(f,r);v()._OrtAddSessionConfigEntry(t,i,u)!==0&&A(`Can't set a session config entry: 'deviceType' - ${f}.`)}}break;case"webgpu":if(n="JS",typeof o!="string"){let s=o;if(s?.preferredLayout){if(s.preferredLayout!=="NCHW"&&s.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${s.preferredLayout}`);let f=x("preferredLayout",r),i=x(s.preferredLayout,r);v()._OrtAddSessionConfigEntry(t,f,i)!==0&&A(`Can't set a session config entry: 'preferredLayout' - ${s.preferredLayout}.`)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${n}`)}let a=x(n,r);v()._OrtAppendExecutionProvider(t,a)!==0&&A(`Can't append execution provider: ${n}.`)}},Qt=t=>{let e=v(),r=0,o=[],n=t||{};kr(n);try{let a=Rr(n.graphOptimizationLevel??"all"),s=_r(n.executionMode??"sequential"),f=typeof n.logId=="string"?x(n.logId,o):0,i=n.logSeverityLevel??2;if(!Number.isInteger(i)||i<0||i>4)throw new Error(`log serverity level is not valid: ${i}`);let u=n.logVerbosityLevel??0;if(!Number.isInteger(u)||u<0||u>4)throw new Error(`log verbosity level is not valid: ${u}`);let l=typeof n.optimizedModelFilePath=="string"?x(n.optimizedModelFilePath,o):0;if(r=e._OrtCreateSessionOptions(a,!!n.enableCpuMemArena,!!n.enableMemPattern,s,!!n.enableProfiling,0,f,i,u,l),r===0&&A("Can't create session options."),n.executionProviders&&Fr(r,n.executionProviders,o),n.enableGraphCapture!==void 0){if(typeof n.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${n.enableGraphCapture}`);let d=x("enableGraphCapture",o),c=x(n.enableGraphCapture.toString(),o);e._OrtAddSessionConfigEntry(r,d,c)!==0&&A(`Can't set a session config entry: 'enableGraphCapture' - ${n.enableGraphCapture}.`)}if(n.freeDimensionOverrides)for(let[d,c]of Object.entries(n.freeDimensionOverrides)){if(typeof d!="string")throw new Error(`free dimension override name must be a string: ${d}`);if(typeof c!="number"||!Number.isInteger(c)||c<0)throw new Error(`free dimension override value must be a non-negative integer: ${c}`);let p=x(d,o);e._OrtAddFreeDimensionOverride(r,p,c)!==0&&A(`Can't set a free dimension override: ${d} - ${c}.`)}return n.extra!==void 0&&ie(n.extra,"",new WeakSet,(d,c)=>{let p=x(d,o),m=x(c,o);e._OrtAddSessionConfigEntry(r,p,m)!==0&&A(`Can't set a session config entry: ${d} - ${c}.`)}),[r,o]}catch(a){throw r!==0&&e._OrtReleaseSessionOptions(r),o.forEach(s=>e._free(s)),a}}});var Xe,er,Ke,tr,rr,Me,nr,Qe=w(()=>{"use strict";Xe=t=>{switch(t){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;default:throw new Error(`unsupported data type: ${t}`)}},er=t=>{switch(t){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";default:throw new Error(`unsupported data type: ${t}`)}},Ke=t=>[void 0,4,1,1,2,2,4,8,void 0,1,2,8,4,8,void 0,void 0,void 0][t],tr=t=>{switch(t){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"bool":return Uint8Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${t}`)}},rr=t=>{switch(t){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${t}`)}},Me=t=>t==="float32"||t==="float16"||t==="int32"||t==="int64"||t==="uint32"||t==="uint8"||t==="bool",nr=t=>{switch(t){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;default:throw new Error(`unsupported data location: ${t}`)}}});var ue,Ze=w(()=>{"use strict";Te();ue=async t=>{if(typeof t=="string")if(!1)try{let{readFile:e}=We("node:fs/promises");return new Uint8Array(await e(t))}catch(e){if(e.code==="ERR_FS_FILE_TOO_LARGE"){let{createReadStream:r}=We("node:fs"),o=r(t),n=[];for await(let a of o)n.push(a);return new Uint8Array(Buffer.concat(n))}throw e}else{let e=await fetch(t);if(!e.ok)throw new Error(`failed to load external data file: ${t}`);let r=e.headers.get("Content-Length"),o=r?parseInt(r,10):0;if(o<1073741824)return new Uint8Array(await e.arrayBuffer());{if(!e.body)throw new Error(`failed to load external data file: ${t}, no response body.`);let n=e.body.getReader(),a;try{a=new ArrayBuffer(o)}catch(f){if(f instanceof RangeError){let i=Math.ceil(o/65536);a=new WebAssembly.Memory({initial:i,maximum:i}).buffer}else throw f}let s=0;for(;;){let{done:f,value:i}=await n.read();if(f)break;let u=i.byteLength;new Uint8Array(a,s,u).set(i),s+=u}return new Uint8Array(a,0,o)}}else return t instanceof Blob?new Uint8Array(await t.arrayBuffer()):t instanceof Uint8Array?t:new Uint8Array(t)}});var Nr,Oe,ve,J,Wr,ae,xe,Ie,or,Pe,Be,Le,Ye=w(()=>{"use strict";Kt();Zt();Qe();H();Ue();Ze();Nr=(t,e)=>{v()._OrtInit(t,e)!==0&&A("Can't initialize onnxruntime.")},Oe=async t=>{Nr(t.wasm.numThreads,rr(t.logLevel))},ve=async(t,e)=>{},J=new Map,Wr=t=>{let e=v(),r=e.stackSave();try{let o=e.stackAlloc(8);return e._OrtGetInputOutputCount(t,o,o+4)!==0&&A("Can't get session input/output count."),[e.HEAP32[o/4],e.HEAP32[o/4+1]]}finally{e.stackRestore(r)}},ae=t=>{let e=v(),r=e._malloc(t.byteLength);if(r===0)throw new Error(`Can't create a session. failed to allocate a buffer of size ${t.byteLength}.`);return e.HEAPU8.set(t,r),[r,t.byteLength]},xe=async(t,e)=>{let r,o,n=v();Array.isArray(t)?[r,o]=t:t.buffer===n.HEAPU8.buffer?[r,o]=[t.byteOffset,t.byteLength]:[r,o]=ae(t);let a=0,s=0,f=0,i=[],u=[],l=[];try{if([s,i]=Qt(e),e?.externalData&&n.mountExternalData){let h=[];for(let g of e.externalData){let O=typeof g=="string"?g:g.path;h.push(ue(typeof g=="string"?g:g.data).then(B=>{n.mountExternalData(O,B)}))}await Promise.all(h)}for(let h of e?.executionProviders??[])if((typeof h=="string"?h:h.name)==="webnn"){if(n.currentContext)throw new Error("WebNN execution provider is already set.");if(typeof h!="string"){let O=h,B=O?.context,Q=O?.gpuDevice,ce=O?.deviceType,Z=O?.numThreads,de=O?.powerPreference;B?n.currentContext=B:Q?n.currentContext=await navigator.ml.createContext(Q):n.currentContext=await navigator.ml.createContext({deviceType:ce,numThreads:Z,powerPreference:de})}else n.currentContext=await navigator.ml.createContext();break}a=await n._OrtCreateSession(r,o,s),a===0&&A("Can't create a session."),n.currentContext&&(n.currentContext=void 0);let[d,c]=Wr(a),p=!!e?.enableGraphCapture,m=[],y=[],b=[];for(let h=0;h<d;h++){let g=n._OrtGetInputName(a,h);g===0&&A("Can't get an input name."),u.push(g),m.push(n.UTF8ToString(g))}for(let h=0;h<c;h++){let g=n._OrtGetOutputName(a,h);g===0&&A("Can't get an output name."),l.push(g);let O=n.UTF8ToString(g);y.push(O)}let T=null;return J.set(a,[a,u,l,T,p,!1]),[a,m,y]}catch(d){throw u.forEach(c=>n._OrtFree(c)),l.forEach(c=>n._OrtFree(c)),f!==0&&n._OrtReleaseBinding(f),a!==0&&n._OrtReleaseSession(a),d}finally{n._free(r),s!==0&&n._OrtReleaseSessionOptions(s),i.forEach(d=>n._free(d)),n.unmountExternalData?.()}},Ie=t=>{let e=v(),r=J.get(t);if(!r)throw new Error(`cannot release session. invalid session id: ${t}`);let[o,n,a,s,f]=r;s&&(f&&e._OrtClearBoundOutputs(s.handle),e._OrtReleaseBinding(s.handle)),e.jsepOnReleaseSession?.(t),n.forEach(i=>e._OrtFree(i)),a.forEach(i=>e._OrtFree(i)),e._OrtReleaseSession(o),J.delete(t)},or=(t,e,r,o,n,a=!1)=>{if(!t){e.push(0);return}let s=v(),f=t[0],i=t[1],u=t[3],l,d;if(f==="string"&&u==="gpu-buffer")throw new Error("String tensor is not supported on GPU.");if(a&&u!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${n} when enableGraphCapture is true.`);if(u==="gpu-buffer"){let m=t[2].gpuBuffer,y=Ke(Xe(f));d=i.reduce((T,h)=>T*h,1)*y;let b=s.jsepRegisterBuffer;if(!b)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');l=b(o,n,m,d)}else{let m=t[2];if(Array.isArray(m)){d=4*m.length,l=s._malloc(d),r.push(l);let y=l/4;for(let b=0;b<m.length;b++){if(typeof m[b]!="string")throw new TypeError(`tensor data at index ${b} is not a string`);s.HEAPU32[y++]=x(m[b],r)}}else d=m.byteLength,l=s._malloc(d),r.push(l),s.HEAPU8.set(new Uint8Array(m.buffer,m.byteOffset,d),l)}let c=s.stackSave(),p=s.stackAlloc(4*i.length);try{let m=p/4;i.forEach(b=>s.HEAP32[m++]=b);let y=s._OrtCreateTensor(Xe(f),l,d,p,i.length,nr(u));y===0&&A(`Can't create tensor for input/output. session=${o}, index=${n}.`),e.push(y)}finally{s.stackRestore(c)}},Pe=async(t,e,r,o,n,a)=>{let s=v(),f=J.get(t);if(!f)throw new Error(`cannot run inference. invalid session id: ${t}`);let i=f[0],u=f[1],l=f[2],d=f[3],c=f[4],p=f[5],m=e.length,y=o.length,b=0,T=[],h=[],g=[],O=[],B=s.stackSave(),Q=s.stackAlloc(m*4),ce=s.stackAlloc(m*4),Z=s.stackAlloc(y*4),de=s.stackAlloc(y*4);try{[b,T]=Xt(a);for(let E=0;E<m;E++)or(r[E],h,O,t,e[E],c);for(let E=0;E<y;E++)or(n[E],g,O,t,m+o[E],c);let _=Q/4,wr=ce/4,gr=Z/4,br=de/4;for(let E=0;E<m;E++)s.HEAPU32[_++]=h[E],s.HEAPU32[wr++]=u[e[E]];for(let E=0;E<y;E++)s.HEAPU32[gr++]=g[E],s.HEAPU32[br++]=l[o[E]];s.jsepOnRunStart?.(i);let nt;nt=await s._OrtRun(i,ce,Q,m,de,y,Z,b),nt!==0&&A("failed to call OrtRun().");let ee=[];for(let E=0;E<y;E++){let te=s.HEAPU32[Z/4+E];if(te===g[E]){ee.push(n[E]);continue}let ot=s.stackSave(),W=s.stackAlloc(4*4),le=!1,M,k=0;try{s._OrtGetTensorData(te,W,W+4,W+8,W+12)!==0&&A(`Can't access output tensor data on index ${E}.`);let pe=W/4,st=s.HEAPU32[pe++];k=s.HEAPU32[pe++];let at=s.HEAPU32[pe++],Er=s.HEAPU32[pe++],re=[];for(let L=0;L<Er;L++)re.push(s.HEAPU32[at/4+L]);s._OrtFree(at);let ne=re.reduce((L,C)=>L*C,1);M=er(st);let it=d?.outputPreferredLocations[o[E]];if(M==="string"){if(it==="gpu-buffer")throw new Error("String tensor is not supported on GPU.");let L=[],C=k/4;for(let Y=0;Y<ne;Y++){let ut=s.HEAPU32[C++],Sr=Y===ne-1?void 0:s.HEAPU32[C]-ut;L.push(s.UTF8ToString(ut,Sr))}ee.push([M,re,L,"cpu"])}else if(it==="gpu-buffer"&&ne>0){let L=s.jsepGetBuffer;if(!L)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let C=L(k),Y=Ke(st);if(Y===void 0||!Me(M))throw new Error(`Unsupported data type: ${M}`);le=!0,ee.push([M,re,{gpuBuffer:C,download:s.jsepCreateDownloader(C,ne*Y,M),dispose:()=>{s._OrtReleaseTensor(te)}},"gpu-buffer"])}else{let L=tr(M),C=new L(ne);new Uint8Array(C.buffer,C.byteOffset,C.byteLength).set(s.HEAPU8.subarray(k,k+C.byteLength)),ee.push([M,re,C,"cpu"])}}finally{s.stackRestore(ot),M==="string"&&k&&s._free(k),le||s._OrtReleaseTensor(te)}}return d&&!c&&(s._OrtClearBoundOutputs(d.handle),J.set(t,[i,u,l,d,c,!1])),ee}finally{s.stackRestore(B),h.forEach(_=>s._OrtReleaseTensor(_)),g.forEach(_=>s._OrtReleaseTensor(_)),O.forEach(_=>s._free(_)),b!==0&&s._OrtReleaseRunOptions(b),T.forEach(_=>s._free(_))}},Be=t=>{let e=v(),r=J.get(t);if(!r)throw new Error("invalid session id");let o=r[0],n=e._OrtEndProfiling(o);n===0&&A("Can't get an profile file name."),e._OrtFree(n)},Le=t=>{let e=[];for(let r of t){let o=r[2];!Array.isArray(o)&&"buffer"in o&&e.push(o.buffer)}return e}});var V,R,fe,Re,_e,De,et,tt,X,K,Gr,sr,ar,ir,ur,fr,cr,dr,rt=w(()=>{"use strict";z();Ye();H();se();V=()=>!!S.wasm.proxy&&typeof document<"u",fe=!1,Re=!1,_e=!1,tt=new Map,X=(t,e)=>{let r=tt.get(t);r?r.push(e):tt.set(t,[e])},K=()=>{if(fe||!Re||_e||!R)throw new Error("worker not ready")},Gr=t=>{switch(t.data.type){case"init-wasm":fe=!1,t.data.err?(_e=!0,et[1](t.data.err)):(Re=!0,et[0]()),De&&(URL.revokeObjectURL(De),De=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let e=tt.get(t.data.type);t.data.err?e.shift()[1](t.data.err):e.shift()[0](t.data.out);break}default:}},sr=async()=>{if(!Re){if(fe)throw new Error("multiple calls to 'initWasm()' detected.");if(_e)throw new Error("previous call to 'initWasm()' failed.");if(fe=!0,V())return new Promise((t,e)=>{R?.terminate(),Yt().then(([r,o])=>{try{R=o,R.onerror=a=>e(a),R.onmessage=Gr,et=[t,e];let n={type:"init-wasm",in:S};R.postMessage(n),De=r}catch(n){e(n)}},e)});try{await Ae(S.wasm),await Oe(S),Re=!0}catch(t){throw _e=!0,t}finally{fe=!1}}},ar=async t=>{if(V())return K(),new Promise((e,r)=>{X("init-ep",[e,r]);let o={type:"init-ep",in:{epName:t,env:S}};R.postMessage(o)});await ve(S,t)},ir=async t=>V()?(K(),new Promise((e,r)=>{X("copy-from",[e,r]);let o={type:"copy-from",in:{buffer:t}};R.postMessage(o,[t.buffer])})):ae(t),ur=async(t,e)=>{if(V()){if(e?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return K(),new Promise((r,o)=>{X("create",[r,o]);let n={type:"create",in:{model:t,options:{...e}}},a=[];t instanceof Uint8Array&&a.push(t.buffer),R.postMessage(n,a)})}else return xe(t,e)},fr=async t=>{if(V())return K(),new Promise((e,r)=>{X("release",[e,r]);let o={type:"release",in:t};R.postMessage(o)});Ie(t)},cr=async(t,e,r,o,n,a)=>{if(V()){if(r.some(s=>s[3]!=="cpu"))throw new Error("input tensor on GPU is not supported for proxy.");if(n.some(s=>s))throw new Error("pre-allocated output tensor is not supported for proxy.");return K(),new Promise((s,f)=>{X("run",[s,f]);let i=r,u={type:"run",in:{sessionId:t,inputIndices:e,inputs:i,outputIndices:o,options:a}};R.postMessage(u,Le(i))})}else return Pe(t,e,r,o,n,a)},dr=async t=>{if(V())return K(),new Promise((e,r)=>{X("end-profiling",[e,r]);let o={type:"end-profiling",in:t};R.postMessage(o)});Be(t)}});var lr,zr,ke,pr=w(()=>{"use strict";z();rt();Qe();Te();Ze();lr=(t,e)=>{switch(t.location){case"cpu":return[t.type,t.dims,t.data,"cpu"];case"gpu-buffer":return[t.type,t.dims,{gpuBuffer:t.gpuBuffer},"gpu-buffer"];default:throw new Error(`invalid data location: ${t.location} for ${e()}`)}},zr=t=>{switch(t[3]){case"cpu":return new I(t[0],t[2],t[1]);case"gpu-buffer":{let e=t[0];if(!Me(e))throw new Error(`not supported data type: ${e} for deserializing GPU tensor`);let{gpuBuffer:r,download:o,dispose:n}=t[2];return I.fromGpuBuffer(r,{dataType:e,dims:t[1],download:o,dispose:n})}default:throw new Error(`invalid data location: ${t[3]}`)}},ke=class{async fetchModelAndCopyToWasmMemory(e){return ir(await ue(e))}async loadModel(e,r){F();let o;typeof e=="string"?!1?o=await ue(e):o=await this.fetchModelAndCopyToWasmMemory(e):o=e,[this.sessionId,this.inputNames,this.outputNames]=await ur(o,r),N()}async dispose(){return fr(this.sessionId)}async run(e,r,o){F();let n=[],a=[];Object.entries(e).forEach(c=>{let p=c[0],m=c[1],y=this.inputNames.indexOf(p);if(y===-1)throw new Error(`invalid input '${p}'`);n.push(m),a.push(y)});let s=[],f=[];Object.entries(r).forEach(c=>{let p=c[0],m=c[1],y=this.outputNames.indexOf(p);if(y===-1)throw new Error(`invalid output '${p}'`);s.push(m),f.push(y)});let i=n.map((c,p)=>lr(c,()=>`input "${this.inputNames[a[p]]}"`)),u=s.map((c,p)=>c?lr(c,()=>`output "${this.outputNames[f[p]]}"`):null),l=await cr(this.sessionId,a,i,f,u,o),d={};for(let c=0;c<l.length;c++)d[this.outputNames[f[c]]]=s[c]??zr(l[c]);return N(),d}startProfiling(){}endProfiling(){dr(this.sessionId)}}});var Hr,Fe,mr=w(()=>{"use strict";z();rt();pr();se();Hr=()=>{if((typeof S.wasm.initTimeout!="number"||S.wasm.initTimeout<0)&&(S.wasm.initTimeout=0),S.wasm.simd===!1&&console.warn('Deprecated property "env.wasm.simd" is set to false. non-SIMD build is no longer provided, and this setting will be ignored.'),typeof S.wasm.proxy!="boolean"&&(S.wasm.proxy=!1),typeof S.wasm.trace!="boolean"&&(S.wasm.trace=!1),typeof S.wasm.numThreads!="number"||!Number.isInteger(S.wasm.numThreads)||S.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)S.wasm.numThreads=1;else{let t=typeof navigator>"u"?We("node:os").cpus().length:navigator.hardwareConcurrency;S.wasm.numThreads=Math.min(4,Math.ceil((t||1)/2))}S.wasm.wasmPaths===void 0&&D&&D.indexOf("blob:")!==0&&(S.wasm.wasmPaths=D.substring(0,D.lastIndexOf("/")+1))},Fe=class{async init(e){Hr(),await sr(),await ar(e)}async createInferenceSessionHandler(e,r){let o=new ke;return await o.loadModel(e,r),Promise.resolve(o)}}});var hr={};me(hr,{wasmBackend:()=>jr});var jr,yr=w(()=>{"use strict";mr();jr=new Fe});var Yr={};me(Yr,{InferenceSession:()=>Lt,TRACE:()=>He,TRACE_FUNC_BEGIN:()=>F,TRACE_FUNC_END:()=>N,Tensor:()=>I,TrainingSession:()=>kt,default:()=>Vr,env:()=>S,registerBackend:()=>q});z();z();z();var Nt="1.19.2";var Vr=Ve;{let t=(yr(),$e(hr)).wasmBackend;q("cpu",t,10),q("wasm",t,10)}Object.defineProperty(S.versions,"web",{value:Nt,enumerable:!0});return $e(Yr);})();
|
| 7 |
+
typeof exports=="object"&&typeof module=="object"&&(module.exports=ort);
|
| 8 |
+
//# sourceMappingURL=ort.wasm.min.js.map
|
frontend/vendor/vad/bundle.min.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*! For license information please see bundle.min.js.LICENSE.txt */
|
| 2 |
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("onnxruntime-web")):"function"==typeof define&&define.amd?define(["onnxruntime-web"],t):"object"==typeof exports?exports.vad=t(require("onnxruntime-web")):e.vad=t(e.ort)}(self,(e=>(()=>{var t={647:(e,t,r)=>{"use strict";var o=(()=>{var e,t,o,n,s,a,i,l,u,d,c,p,f,h,m,w,g,y,b,v,S,A,E,T,_,O,P,M,C,R,F,x=Object.defineProperty,D=Object.getOwnPropertyDescriptor,U=Object.getOwnPropertyNames,L=Object.prototype.hasOwnProperty,I=r(936),B=(e,t)=>()=>(e&&(t=e(e=0)),t),N=(e,t)=>{for(var r in t)x(e,r,{get:t[r],enumerable:!0})},k=e=>((e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of U(t))!L.call(e,r)&&undefined!==r&&x(e,r,{get:()=>t[r],enumerable:!(o=D(t,r))||o.enumerable});return e})(x({},"__esModule",{value:!0}),e),$=B((()=>{e=new Map,t=[],o=(r,o,n)=>{if(!o||"function"!=typeof o.init||"function"!=typeof o.createInferenceSessionHandler)throw new TypeError("not a valid backend");{let s=e.get(r);if(void 0===s)e.set(r,{backend:o,priority:n});else{if(s.priority>n)return;if(s.priority===n&&s.backend!==o)throw new Error(`cannot register backend "${r}" using priority ${n}`)}if(n>=0){let o=t.indexOf(r);-1!==o&&t.splice(o,1);for(let o=0;o<t.length;o++)if(e.get(t[o]).priority<=n)return void t.splice(o,0,r);t.push(r)}}},n=async t=>{let r=e.get(t);if(!r)return"backend not found.";if(r.initialized)return r.backend;if(r.aborted)return r.error;{let e=!!r.initPromise;try{return e||(r.initPromise=r.backend.init(t)),await r.initPromise,r.initialized=!0,r.backend}catch(t){return e||(r.error=`${t}`,r.aborted=!0),r.error}finally{delete r.initPromise}}},s=async e=>{let r,o=e.executionProviders||[],s=o.map((e=>"string"==typeof e?e:e.name)),a=0===s.length?t:s,i=[],l=new Set;for(let e of a){let t=await n(e);"string"==typeof t?i.push({name:e,err:t}):(r||(r=t),r===t&&l.add(e))}if(!r)throw new Error(`no available backend found. ERR: ${i.map((e=>`[${e.name}] ${e.err}`)).join(", ")}`);for(let{name:e,err:t}of i)s.includes(e)&&console.warn(`removing requested execution provider "${e}" from session options because it is not available: ${t}`);let u=o.filter((e=>l.has("string"==typeof e?e:e.name)));return[r,new Proxy(e,{get:(e,t)=>"executionProviders"===t?u:Reflect.get(e,t)})]}})),j=B((()=>{$()})),V=B((()=>{a="1.22.0"})),G=B((()=>{V(),i="warning",l={wasm:{},webgl:{},webgpu:{},versions:{common:a},set logLevel(e){if(void 0!==e){if("string"!=typeof e||-1===["verbose","info","warning","error","fatal"].indexOf(e))throw new Error(`Unsupported logging level: ${e}`);i=e}},get logLevel(){return i}},Object.defineProperty(l,"logLevel",{enumerable:!0})})),W=B((()=>{G(),u=l})),z=B((()=>{d=(e,t)=>{let r=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);r.width=e.dims[3],r.height=e.dims[2];let o=r.getContext("2d");if(null!=o){let n,s;void 0!==t?.tensorLayout&&"NHWC"===t.tensorLayout?(n=e.dims[2],s=e.dims[3]):(n=e.dims[3],s=e.dims[2]);let a,i,l=void 0!==t?.format?t.format:"RGB",u=t?.norm;void 0===u||void 0===u.mean?a=[255,255,255,255]:"number"==typeof u.mean?a=[u.mean,u.mean,u.mean,u.mean]:(a=[u.mean[0],u.mean[1],u.mean[2],0],void 0!==u.mean[3]&&(a[3]=u.mean[3])),void 0===u||void 0===u.bias?i=[0,0,0,0]:"number"==typeof u.bias?i=[u.bias,u.bias,u.bias,u.bias]:(i=[u.bias[0],u.bias[1],u.bias[2],0],void 0!==u.bias[3]&&(i[3]=u.bias[3]));let d=s*n,c=0,p=d,f=2*d,h=-1;"RGBA"===l?(c=0,p=d,f=2*d,h=3*d):"RGB"===l?(c=0,p=d,f=2*d):"RBG"===l&&(c=0,f=d,p=2*d);for(let t=0;t<s;t++)for(let r=0;r<n;r++){let n=(e.data[c++]-i[0])*a[0],s=(e.data[p++]-i[1])*a[1],l=(e.data[f++]-i[2])*a[2],u=-1===h?255:(e.data[h++]-i[3])*a[3];o.fillStyle="rgba("+n+","+s+","+l+","+u+")",o.fillRect(r,t,1,1)}if("toDataURL"in r)return r.toDataURL();throw new Error("toDataURL is not supported")}throw new Error("Can not access image data")},c=(e,t)=>{let r,o=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d");if(null==o)throw new Error("Can not access image data");{let n,s,a;void 0!==t?.tensorLayout&&"NHWC"===t.tensorLayout?(n=e.dims[2],s=e.dims[1],a=e.dims[3]):(n=e.dims[3],s=e.dims[2],a=e.dims[1]);let i,l,u=void 0!==t&&void 0!==t.format?t.format:"RGB",d=t?.norm;void 0===d||void 0===d.mean?i=[255,255,255,255]:"number"==typeof d.mean?i=[d.mean,d.mean,d.mean,d.mean]:(i=[d.mean[0],d.mean[1],d.mean[2],255],void 0!==d.mean[3]&&(i[3]=d.mean[3])),void 0===d||void 0===d.bias?l=[0,0,0,0]:"number"==typeof d.bias?l=[d.bias,d.bias,d.bias,d.bias]:(l=[d.bias[0],d.bias[1],d.bias[2],0],void 0!==d.bias[3]&&(l[3]=d.bias[3]));let c=s*n;if(void 0!==t&&(void 0!==t.format&&4===a&&"RGBA"!==t.format||3===a&&"RGB"!==t.format&&"BGR"!==t.format))throw new Error("Tensor format doesn't match input tensor dims");let p=4,f=0,h=1,m=2,w=3,g=0,y=c,b=2*c,v=-1;"RGBA"===u?(g=0,y=c,b=2*c,v=3*c):"RGB"===u?(g=0,y=c,b=2*c):"RBG"===u&&(g=0,b=c,y=2*c),r=o.createImageData(n,s);for(let t=0;t<s*n;f+=p,h+=p,m+=p,w+=p,t++)r.data[f]=(e.data[g++]-l[0])*i[0],r.data[h]=(e.data[y++]-l[1])*i[1],r.data[m]=(e.data[b++]-l[2])*i[2],r.data[w]=-1===v?255:(e.data[v++]-l[3])*i[3]}return r}})),H=B((()=>{J(),p=(e,t)=>{if(void 0===e)throw new Error("Image buffer must be defined");if(void 0===t.height||void 0===t.width)throw new Error("Image height and width must be defined");if("NHWC"===t.tensorLayout)throw new Error("NHWC Tensor layout is not supported yet");let r,o,{height:n,width:s}=t,a=t.norm??{mean:255,bias:0};r="number"==typeof a.mean?[a.mean,a.mean,a.mean,a.mean]:[a.mean[0],a.mean[1],a.mean[2],a.mean[3]??255],o="number"==typeof a.bias?[a.bias,a.bias,a.bias,a.bias]:[a.bias[0],a.bias[1],a.bias[2],a.bias[3]??0];let i=void 0!==t.format?t.format:"RGBA",l=void 0!==t.tensorFormat&&void 0!==t.tensorFormat?t.tensorFormat:"RGB",u=n*s,d="RGBA"===l?new Float32Array(4*u):new Float32Array(3*u),c=4,p=0,f=1,h=2,m=3,w=0,g=u,y=2*u,b=-1;"RGB"===i&&(c=3,p=0,f=1,h=2,m=-1),"RGBA"===l?b=3*u:"RBG"===l?(w=0,y=u,g=2*u):"BGR"===l&&(y=0,g=u,w=2*u);for(let t=0;t<u;t++,p+=c,h+=c,f+=c,m+=c)d[w++]=(e[p]+o[0])/r[0],d[g++]=(e[f]+o[1])/r[1],d[y++]=(e[h]+o[2])/r[2],-1!==b&&-1!==m&&(d[b++]=(e[m]+o[3])/r[3]);return new T("float32",d,"RGBA"===l?[1,4,n,s]:[1,3,n,s])},f=async(e,t)=>{let r,o=typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement,n=typeof ImageData<"u"&&e instanceof ImageData,s=typeof ImageBitmap<"u"&&e instanceof ImageBitmap,a="string"==typeof e,i=t??{},l=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},u=e=>typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||e instanceof OffscreenCanvas?e.getContext("2d"):null;if(o){let o=l();o.width=e.width,o.height=e.height;let n=u(o);if(null==n)throw new Error("Can not access image data");{let o=e.height,s=e.width;if(void 0!==t&&void 0!==t.resizedHeight&&void 0!==t.resizedWidth&&(o=t.resizedHeight,s=t.resizedWidth),void 0!==t){if(i=t,void 0!==t.tensorFormat)throw new Error("Image input config format must be RGBA for HTMLImageElement");i.tensorFormat="RGBA",i.height=o,i.width=s}else i.tensorFormat="RGBA",i.height=o,i.width=s;n.drawImage(e,0,0),r=n.getImageData(0,0,s,o).data}}else{if(!n){if(s){if(void 0===t)throw new Error("Please provide image config with format for Imagebitmap");let o=l();o.width=e.width,o.height=e.height;let n=u(o);if(null!=n){let t=e.height,o=e.width;return n.drawImage(e,0,0,o,t),r=n.getImageData(0,0,o,t).data,i.height=t,i.width=o,p(r,i)}throw new Error("Can not access image data")}if(a)return new Promise(((t,r)=>{let o=l(),n=u(o);if(!e||!n)return r();let s=new Image;s.crossOrigin="Anonymous",s.src=e,s.onload=()=>{o.width=s.width,o.height=s.height,n.drawImage(s,0,0,o.width,o.height);let e=n.getImageData(0,0,o.width,o.height);i.height=o.height,i.width=o.width,t(p(e.data,i))}}));throw new Error("Input data provided is not supported - aborted tensor creation")}{let o,n;if(void 0!==t&&void 0!==t.resizedWidth&&void 0!==t.resizedHeight?(o=t.resizedHeight,n=t.resizedWidth):(o=e.height,n=e.width),void 0!==t&&(i=t),i.format="RGBA",i.height=o,i.width=n,void 0!==t){let t=l();t.width=n,t.height=o;let s=u(t);if(null==s)throw new Error("Can not access image data");s.putImageData(e,0,0),r=s.getImageData(0,0,n,o).data}else r=e.data}}if(void 0!==r)return p(r,i);throw new Error("Input data provided is not supported - aborted tensor creation")},h=(e,t)=>{let{width:r,height:o,download:n,dispose:s}=t;return new T({location:"texture",type:"float32",texture:e,dims:[1,o,r,4],download:n,dispose:s})},m=(e,t)=>{let{dataType:r,dims:o,download:n,dispose:s}=t;return new T({location:"gpu-buffer",type:r??"float32",gpuBuffer:e,dims:o,download:n,dispose:s})},w=(e,t)=>{let{dataType:r,dims:o,download:n,dispose:s}=t;return new T({location:"ml-tensor",type:r??"float32",mlTensor:e,dims:o,download:n,dispose:s})},g=(e,t,r)=>new T({location:"cpu-pinned",type:e,data:t,dims:r??[t.length]})})),Z=B((()=>{y=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),b=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),v=!1,S=()=>{if(!v){v=!0;let e=typeof BigInt64Array<"u"&&BigInt64Array.from,t=typeof BigUint64Array<"u"&&BigUint64Array.from,r=globalThis.Float16Array,o=typeof r<"u"&&r.from;e&&(y.set("int64",BigInt64Array),b.set(BigInt64Array,"int64")),t&&(y.set("uint64",BigUint64Array),b.set(BigUint64Array,"uint64")),o?(y.set("float16",r),b.set(r,"float16")):y.set("float16",Uint16Array)}}})),q=B((()=>{J(),A=e=>{let t=1;for(let r=0;r<e.length;r++){let o=e[r];if("number"!=typeof o||!Number.isSafeInteger(o))throw new TypeError(`dims[${r}] must be an integer, got: ${o}`);if(o<0)throw new RangeError(`dims[${r}] must be a non-negative integer, got: ${o}`);t*=o}return t},E=(e,t)=>{switch(e.location){case"cpu":return new T(e.type,e.data,t);case"cpu-pinned":return new T({location:"cpu-pinned",data:e.data,type:e.type,dims:t});case"texture":return new T({location:"texture",texture:e.texture,type:e.type,dims:t});case"gpu-buffer":return new T({location:"gpu-buffer",gpuBuffer:e.gpuBuffer,type:e.type,dims:t});case"ml-tensor":return new T({location:"ml-tensor",mlTensor:e.mlTensor,type:e.type,dims:t});default:throw new Error(`tensorReshape: tensor location ${e.location} is not supported`)}}})),J=B((()=>{z(),H(),Z(),q(),T=class{constructor(e,t,r){let o,n;if(S(),"object"==typeof e&&"location"in e)switch(this.dataLocation=e.location,o=e.type,n=e.dims,e.location){case"cpu-pinned":{let t=y.get(o);if(!t)throw new TypeError(`unsupported type "${o}" to create tensor from pinned buffer`);if(!(e.data instanceof t))throw new TypeError(`buffer should be of type ${t.name}`);this.cpuData=e.data;break}case"texture":if("float32"!==o)throw new TypeError(`unsupported type "${o}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break;case"gpu-buffer":if("float32"!==o&&"float16"!==o&&"int32"!==o&&"int64"!==o&&"uint32"!==o&&"uint8"!==o&&"bool"!==o&&"uint4"!==o&&"int4"!==o)throw new TypeError(`unsupported type "${o}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break;case"ml-tensor":if("float32"!==o&&"float16"!==o&&"int32"!==o&&"int64"!==o&&"uint32"!==o&&"uint64"!==o&&"int8"!==o&&"uint8"!==o&&"bool"!==o&&"uint4"!==o&&"int4"!==o)throw new TypeError(`unsupported type "${o}" to create tensor from MLTensor`);this.mlTensorData=e.mlTensor,this.downloader=e.download,this.disposer=e.dispose;break;default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let s,a;if("string"==typeof e)if(o=e,a=r,"string"===e){if(!Array.isArray(t))throw new TypeError("A string tensor's data must be a string array.");s=t}else{let r=y.get(e);if(void 0===r)throw new TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t)){if("float16"===e&&r===Uint16Array||"uint4"===e||"int4"===e)throw new TypeError(`Creating a ${e} tensor from number array is not supported. Please use ${r.name} as data.`);s="uint64"===e||"int64"===e?r.from(t,BigInt):r.from(t)}else if(t instanceof r)s=t;else if(t instanceof Uint8ClampedArray){if("uint8"!==e)throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");s=Uint8Array.from(t)}else{if(!("float16"===e&&t instanceof Uint16Array&&r!==Uint16Array))throw new TypeError(`A ${o} tensor's data must be type of ${r}`);s=new globalThis.Float16Array(t.buffer,t.byteOffset,t.length)}}else if(a=t,Array.isArray(e)){if(0===e.length)throw new TypeError("Tensor type cannot be inferred from an empty array.");let t=typeof e[0];if("string"===t)o="string",s=e;else{if("boolean"!==t)throw new TypeError(`Invalid element type of data array: ${t}.`);o="bool",s=Uint8Array.from(e)}}else if(e instanceof Uint8ClampedArray)o="uint8",s=Uint8Array.from(e);else{let t=b.get(e.constructor);if(void 0===t)throw new TypeError(`Unsupported type for tensor data: ${e.constructor}.`);o=t,s=e}if(void 0===a)a=[s.length];else if(!Array.isArray(a))throw new TypeError("A tensor's dims must be a number array");n=a,this.cpuData=s,this.dataLocation="cpu"}let s=A(n);if(this.cpuData&&s!==this.cpuData.length&&("uint4"!==o&&"int4"!==o||Math.ceil(s/2)!==this.cpuData.length))throw new Error(`Tensor's size(${s}) does not match data length(${this.cpuData.length}).`);this.type=o,this.dims=n,this.size=s}static async fromImage(e,t){return f(e,t)}static fromTexture(e,t){return h(e,t)}static fromGpuBuffer(e,t){return m(e,t)}static fromMLTensor(e,t){return w(e,t)}static fromPinnedBuffer(e,t,r){return g(e,t,r)}toDataURL(e){return d(this,e)}toImageData(e){return c(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(e){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let t=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=t,e&&this.disposer&&(this.disposer(),this.disposer=void 0),t}finally{this.isDownloading=!1}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if("none"===this.dataLocation)throw new Error("The tensor is disposed.")}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return E(this,e)}}})),K=B((()=>{J(),_=T})),Q=B((()=>{G(),O=(e,t)=>{(typeof l.trace>"u"?!l.wasm.trace:!l.trace)||console.timeStamp(`${e}::ORT::${t}`)},P=(e,t)=>{let r=(new Error).stack?.split(/\r\n|\r|\n/g)||[],o=!1;for(let n=0;n<r.length;n++){if(o&&!r[n].includes("TRACE_FUNC")){let o=`FUNC_${e}::${r[n].trim().split(" ")[1]}`;return t&&(o+=`::${t}`),void O("CPU",o)}r[n].includes("TRACE_FUNC")&&(o=!0)}},M=e=>{(typeof l.trace>"u"?!l.wasm.trace:!l.trace)||P("BEGIN",e)},C=e=>{(typeof l.trace>"u"?!l.wasm.trace:!l.trace)||P("END",e)}})),X=B((()=>{$(),K(),Q(),R=class e{constructor(e){this.handler=e}async run(e,t,r){M();let o={},n={};if("object"!=typeof e||null===e||e instanceof _||Array.isArray(e))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if("object"==typeof t){if(null===t)throw new TypeError("Unexpected argument[1]: cannot be null.");if(t instanceof _)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(t)){if(0===t.length)throw new TypeError("'fetches' cannot be an empty array.");s=!1;for(let e of t){if("string"!=typeof e)throw new TypeError("'fetches' must be a string array or an object.");if(-1===this.outputNames.indexOf(e))throw new RangeError(`'fetches' contains invalid output name: ${e}.`);o[e]=null}if("object"==typeof r&&null!==r)n=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else{let e=!1,a=Object.getOwnPropertyNames(t);for(let r of this.outputNames)if(-1!==a.indexOf(r)){let n=t[r];(null===n||n instanceof _)&&(e=!0,s=!1,o[r]=n)}if(e){if("object"==typeof r&&null!==r)n=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else n=t}}else if(typeof t<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let t of this.inputNames)if(typeof e[t]>"u")throw new Error(`input '${t}' is missing in 'feeds'.`);if(s)for(let e of this.outputNames)o[e]=null;let a=await this.handler.run(e,o,n),i={};for(let e in a)if(Object.hasOwnProperty.call(a,e)){let t=a[e];i[e]=t instanceof _?t:new _(t.type,t.data,t.dims)}return C(),i}async release(){return this.handler.dispose()}static async create(t,r,o,n){M();let a,i={};if("string"==typeof t){if(a=t,"object"==typeof r&&null!==r)i=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(t instanceof Uint8Array){if(a=t,"object"==typeof r&&null!==r)i=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else{if(!(t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer))throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");{let e=t,s=0,l=t.byteLength;if("object"==typeof r&&null!==r)i=r;else if("number"==typeof r){if(s=r,!Number.isSafeInteger(s))throw new RangeError("'byteOffset' must be an integer.");if(s<0||s>=e.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${e.byteLength}).`);if(l=t.byteLength-s,"number"==typeof o){if(l=o,!Number.isSafeInteger(l))throw new RangeError("'byteLength' must be an integer.");if(l<=0||s+l>e.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${e.byteLength-s}].`);if("object"==typeof n&&null!==n)i=n;else if(typeof n<"u")throw new TypeError("'options' must be an object.")}else if(typeof o<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof r<"u")throw new TypeError("'options' must be an object.");a=new Uint8Array(e,s,l)}}let[l,u]=await s(i),d=await l.createInferenceSessionHandler(a,u);return C(),new e(d)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}})),Y=B((()=>{X(),F=R})),ee=B((()=>{})),te=B((()=>{})),re=B((()=>{})),oe=B((()=>{})),ne={};N(ne,{InferenceSession:()=>F,TRACE:()=>O,TRACE_FUNC_BEGIN:()=>M,TRACE_FUNC_END:()=>C,Tensor:()=>_,env:()=>u,registerBackend:()=>o});var se=B((()=>{j(),W(),Y(),K(),ee(),te(),Q(),re(),oe()})),ae=B((()=>{})),ie={};N(ie,{default:()=>de});var le,ue,de,ce,pe,fe,he,me,we,ge,ye,be,ve,Se,Ae,Ee,Te,_e,Oe,Pe,Me,Ce,Re,Fe,xe,De,Ue,Le,Ie,Be,Ne,ke,$e,je,Ve,Ge,We,ze,He,Ze,qe,Je,Ke,Qe,Xe,Ye,et,tt,rt,ot,nt,st,at,it,lt,ut,dt,ct,pt,ft,ht,mt,wt,gt,yt,bt,vt,St,At,Et,Tt,_t,Ot,Pt,Mt,Ct,Rt=B((()=>{Nt(),xt(),Ft(),le="ort-wasm-proxy-worker",(ue=globalThis.self?.name===le)&&(self.onmessage=e=>{let{type:t,in:r}=e.data;try{switch(t){case"init-wasm":Ce(r.wasm).then((()=>{Qe(r).then((()=>{postMessage({type:t})}),(e=>{postMessage({type:t,err:e})}))}),(e=>{postMessage({type:t,err:e})}));break;case"init-ep":{let{epName:e,env:o}=r;Xe(o,e).then((()=>{postMessage({type:t})}),(e=>{postMessage({type:t,err:e})}));break}case"copy-from":{let{buffer:e}=r,o=rt(e);postMessage({type:t,out:o});break}case"create":{let{model:e,options:o}=r;ot(e,o).then((e=>{postMessage({type:t,out:e})}),(e=>{postMessage({type:t,err:e})}));break}case"release":nt(r),postMessage({type:t});break;case"run":{let{sessionId:e,inputIndices:o,inputs:n,outputIndices:s,options:a}=r;at(e,o,n,s,new Array(s.length).fill(null),a).then((e=>{e.some((e=>"cpu"!==e[3]))?postMessage({type:t,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:t,out:e},lt([...n,...e]))}),(e=>{postMessage({type:t,err:e})}));break}case"end-profiling":it(r),postMessage({type:t})}}catch(e){postMessage({type:t,err:e})}}),de=ue?null:e=>new Worker(e??pe,{type:"classic",name:le})})),Ft=B((()=>{ae(),ce=typeof location>"u"?void 0:location.origin,pe=typeof document<"u"?document.currentScript?.src:typeof self<"u"?self.location?.href:void 0,fe=()=>{if(pe&&!pe.startsWith("blob:"))return pe.substring(0,pe.lastIndexOf("/")+1)},he=(e,t)=>{try{let r=t??pe;return(r?new URL(e,r):new URL(e)).origin===ce}catch{return!1}},me=(e,t)=>{let r=t??pe;try{return(r?new URL(e,r):new URL(e)).href}catch{return}},we=(e,t)=>`${t??"./"}${e}`,ge=async e=>{let t=await(await fetch(e,{credentials:"same-origin"})).blob();return URL.createObjectURL(t)},ye=async e=>(await import(e)).default,be=(Rt(),k(ie)).default,ve=async()=>{if(!pe)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if(he(pe))return[void 0,be()];let e=await ge(pe);return[e,be(e)]},Se=async(e,t,r)=>{{let o="ort-wasm-simd-threaded.mjs",n=e??me(o,t),s=r&&n&&!he(n,t),a=s?await ge(n):n??we(o,t);return[s?a:void 0,await ye(a)]}}})),xt=B((()=>{Ft(),Ee=!1,Te=!1,_e=!1,Oe=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},Pe=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},Me=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},Ce=async e=>{if(Ee)return Promise.resolve();if(Te)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(_e)throw new Error("previous call to 'initializeWebAssembly()' failed.");Te=!0;let t=e.initTimeout,r=e.numThreads;if(!1!==e.simd)if("relaxed"===e.simd){if(!Me())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!Pe())throw new Error("WebAssembly SIMD is not supported in the current environment.");let o=Oe();r>1&&!o&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+r+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),e.numThreads=r=1);let n=e.wasmPaths,s="string"==typeof n?n:void 0,a=n?.mjs,i=a?.href??a,l=n?.wasm,u=l?.href??l,d=e.wasmBinary,[c,p]=await Se(i,s,r>1),f=!1,h=[];if(t>0&&h.push(new Promise((e=>{setTimeout((()=>{f=!0,e()}),t)}))),h.push(new Promise(((e,t)=>{let o={numThreads:r};if(d)o.wasmBinary=d;else if(u||s)o.locateFile=e=>u??s+e;else if(i&&0!==i.indexOf("blob:"))o.locateFile=e=>new URL(e,i).href;else if(c){let e=fe();e&&(o.locateFile=t=>e+t)}p(o).then((t=>{Te=!1,Ee=!0,Ae=t,e(),c&&URL.revokeObjectURL(c)}),(e=>{Te=!1,_e=!0,t(e)}))}))),await Promise.race(h),f)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},Re=()=>{if(Ee&&Ae)return Ae;throw new Error("WebAssembly is not initialized yet.")}})),Dt=B((()=>{xt(),Fe=(e,t)=>{let r=Re(),o=r.lengthBytesUTF8(e)+1,n=r._malloc(o);return r.stringToUTF8(e,n,o),t.push(n),n},xe=(e,t,r,o)=>{if("object"==typeof e&&null!==e){if(r.has(e))throw new Error("Circular reference in options");r.add(e)}Object.entries(e).forEach((([e,n])=>{let s=t?t+e:e;if("object"==typeof n)xe(n,s+".",r,o);else if("string"==typeof n||"number"==typeof n)o(s,n.toString());else{if("boolean"!=typeof n)throw new Error("Can't handle extra config type: "+typeof n);o(s,n?"1":"0")}}))},De=e=>{let t=Re(),r=t.stackSave();try{let r=t.PTR_SIZE,o=t.stackAlloc(2*r);t._OrtGetLastError(o,o+r);let n=Number(t.getValue(o,4===r?"i32":"i64")),s=t.getValue(o+r,"*"),a=s?t.UTF8ToString(s):"";throw new Error(`${e} ERROR_CODE: ${n}, ERROR_MESSAGE: ${a}`)}finally{t.stackRestore(r)}}})),Ut=B((()=>{xt(),Dt(),Ue=e=>{let t=Re(),r=0,o=[],n=e||{};try{if(void 0===e?.logSeverityLevel)n.logSeverityLevel=2;else if("number"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if(void 0===e?.logVerbosityLevel)n.logVerbosityLevel=0;else if("number"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);void 0===e?.terminate&&(n.terminate=!1);let s=0;return void 0!==e?.tag&&(s=Fe(e.tag,o)),r=t._OrtCreateRunOptions(n.logSeverityLevel,n.logVerbosityLevel,!!n.terminate,s),0===r&&De("Can't create run options."),void 0!==e?.extra&&xe(e.extra,"",new WeakSet,((e,n)=>{let s=Fe(e,o),a=Fe(n,o);0!==t._OrtAddRunConfigEntry(r,s,a)&&De(`Can't set a run config entry: ${e} - ${n}.`)})),[r,o]}catch(e){throw 0!==r&&t._OrtReleaseRunOptions(r),o.forEach((e=>t._free(e))),e}}})),Lt=B((()=>{xt(),Dt(),Le=e=>{switch(e){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}},Ie=e=>{switch(e){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}},Be=e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});let t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly="1"),e.executionProviders&&e.executionProviders.some((e=>"webgpu"===("string"==typeof e?e:e.name)))&&(e.enableMemPattern=!1)},Ne=(e,t,r,o)=>{let n=Fe(t,o),s=Fe(r,o);0!==Re()._OrtAddSessionConfigEntry(e,n,s)&&De(`Can't set a session config entry: ${t} - ${r}.`)},ke=async(e,t,r)=>{for(let o of t){let t="string"==typeof o?o:o.name,n=[];switch(t){case"webnn":if(t="WEBNN","string"!=typeof o){let t=o?.deviceType;t&&Ne(e,"deviceType",t,r)}break;case"webgpu":if(t="JS","string"!=typeof o){let t=o;if(t?.preferredLayout){if("NCHW"!==t.preferredLayout&&"NHWC"!==t.preferredLayout)throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${t.preferredLayout}`);Ne(e,"preferredLayout",t.preferredLayout,r)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${t}`)}let s=Fe(t,r),a=n.length,i=0,l=0;if(a>0){i=Re()._malloc(a*Re().PTR_SIZE),r.push(i),l=Re()._malloc(a*Re().PTR_SIZE),r.push(l);for(let e=0;e<a;e++)Re().setValue(i+e*Re().PTR_SIZE,n[e][0],"*"),Re().setValue(l+e*Re().PTR_SIZE,n[e][1],"*")}0!==await Re()._OrtAppendExecutionProvider(e,s,i,l,a)&&De(`Can't append execution provider: ${t}.`)}},$e=async e=>{let t=Re(),r=0,o=[],n=e||{};Be(n);try{let e=Le(n.graphOptimizationLevel??"all"),s=Ie(n.executionMode??"sequential"),a="string"==typeof n.logId?Fe(n.logId,o):0,i=n.logSeverityLevel??2;if(!Number.isInteger(i)||i<0||i>4)throw new Error(`log serverity level is not valid: ${i}`);let l=n.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw new Error(`log verbosity level is not valid: ${l}`);let u="string"==typeof n.optimizedModelFilePath?Fe(n.optimizedModelFilePath,o):0;if(r=t._OrtCreateSessionOptions(e,!!n.enableCpuMemArena,!!n.enableMemPattern,s,!!n.enableProfiling,0,a,i,l,u),0===r&&De("Can't create session options."),n.executionProviders&&await ke(r,n.executionProviders,o),void 0!==n.enableGraphCapture){if("boolean"!=typeof n.enableGraphCapture)throw new Error(`enableGraphCapture must be a boolean value: ${n.enableGraphCapture}`);Ne(r,"enableGraphCapture",n.enableGraphCapture.toString(),o)}if(n.freeDimensionOverrides)for(let[e,s]of Object.entries(n.freeDimensionOverrides)){if("string"!=typeof e)throw new Error(`free dimension override name must be a string: ${e}`);if("number"!=typeof s||!Number.isInteger(s)||s<0)throw new Error(`free dimension override value must be a non-negative integer: ${s}`);let n=Fe(e,o);0!==t._OrtAddFreeDimensionOverride(r,n,s)&&De(`Can't set a free dimension override: ${e} - ${s}.`)}return void 0!==n.extra&&xe(n.extra,"",new WeakSet,((e,t)=>{Ne(r,e,t,o)})),[r,o]}catch(e){throw 0!==r&&0!==t._OrtReleaseSessionOptions(r)&&De("Can't release session options."),o.forEach((e=>t._free(e))),e}}})),It=B((()=>{je=e=>{switch(e){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw new Error(`unsupported data type: ${e}`)}},Ve=e=>{switch(e){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw new Error(`unsupported data type: ${e}`)}},Ge=(e,t)=>{let r=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][e],o="number"==typeof t?t:t.reduce(((e,t)=>e*t),1);return r>0?Math.ceil(o*r):void 0},We=e=>{switch(e){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":case"bool":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},ze=e=>{switch(e){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${e}`)}},He=e=>"float32"===e||"float16"===e||"int32"===e||"int64"===e||"uint32"===e||"uint8"===e||"bool"===e||"uint4"===e||"int4"===e,Ze=e=>"float32"===e||"float16"===e||"int32"===e||"int64"===e||"uint32"===e||"uint64"===e||"int8"===e||"uint8"===e||"bool"===e||"uint4"===e||"int4"===e,qe=e=>{switch(e){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw new Error(`unsupported data location: ${e}`)}}})),Bt=B((()=>{ae(),Je=async e=>{if("string"==typeof e){let t=await fetch(e);if(!t.ok)throw new Error(`failed to load external data file: ${e}`);let r=t.headers.get("Content-Length"),o=r?parseInt(r,10):0;if(o<1073741824)return new Uint8Array(await t.arrayBuffer());{if(!t.body)throw new Error(`failed to load external data file: ${e}, no response body.`);let r,n=t.body.getReader();try{r=new ArrayBuffer(o)}catch(e){if(!(e instanceof RangeError))throw e;{let e=Math.ceil(o/65536);r=new WebAssembly.Memory({initial:e,maximum:e}).buffer}}let s=0;for(;;){let{done:e,value:t}=await n.read();if(e)break;let o=t.byteLength;new Uint8Array(r,s,o).set(t),s+=o}return new Uint8Array(r,0,o)}}return e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof Uint8Array?e:new Uint8Array(e)}})),Nt=B((()=>{Ut(),Lt(),It(),xt(),Dt(),Bt(),Ke=(e,t)=>{0!==Re()._OrtInit(e,t)&&De("Can't initialize onnxruntime.")},Qe=async e=>{Ke(e.wasm.numThreads,ze(e.logLevel))},Xe=async(e,t)=>{Re().asyncInit?.()},Ye=new Map,et=e=>{let t=Re(),r=t.stackSave();try{let r=t.PTR_SIZE,o=t.stackAlloc(2*r);0!==t._OrtGetInputOutputCount(e,o,o+r)&&De("Can't get session input/output count.");let n=4===r?"i32":"i64";return[Number(t.getValue(o,n)),Number(t.getValue(o+r,n))]}finally{t.stackRestore(r)}},tt=(e,t)=>{let r=Re(),o=r.stackSave(),n=0;try{let o=r.PTR_SIZE,s=r.stackAlloc(2*o);0!==r._OrtGetInputOutputMetadata(e,t,s,s+o)&&De("Can't get session input/output metadata.");let a=Number(r.getValue(s,"*"));n=Number(r.getValue(s+o,"*"));let i=r.HEAP32[n/4];if(0===i)return[a,0];let l=r.HEAPU32[n/4+1],u=[];for(let e=0;e<l;e++){let t=Number(r.getValue(n+8+e*o,"*"));u.push(0!==t?r.UTF8ToString(t):Number(r.getValue(n+8+(e+l)*o,"*")))}return[a,i,u]}finally{r.stackRestore(o),0!==n&&r._OrtFree(n)}},rt=e=>{let t=Re(),r=t._malloc(e.byteLength);if(0===r)throw new Error(`Can't create a session. failed to allocate a buffer of size ${e.byteLength}.`);return t.HEAPU8.set(e,r),[r,e.byteLength]},ot=async(e,t)=>{let r,o,n=Re();Array.isArray(e)?[r,o]=e:e.buffer===n.HEAPU8.buffer?[r,o]=[e.byteOffset,e.byteLength]:[r,o]=rt(e);let s=0,a=0,i=[],l=[],u=[];try{if([a,i]=await $e(t),t?.externalData&&n.mountExternalData){let e=[];for(let r of t.externalData){let t="string"==typeof r?r:r.path;e.push(Je("string"==typeof r?r:r.data).then((e=>{n.mountExternalData(t,e)})))}await Promise.all(e)}for(let e of t?.executionProviders??[])if("webnn"===("string"==typeof e?e:e.name)){if(n.shouldTransferToMLTensor=!1,"string"!=typeof e){let t=e,r=t?.context,o=t?.gpuDevice,s=t?.deviceType,a=t?.powerPreference;n.currentContext=r||(o?await n.webnnCreateMLContext(o):await n.webnnCreateMLContext({deviceType:s,powerPreference:a}))}else n.currentContext=await n.webnnCreateMLContext();break}s=await n._OrtCreateSession(r,o,a),n.webgpuOnCreateSession?.(s),0===s&&De("Can't create a session."),n.jsepOnCreateSession?.(),n.currentContext&&(n.webnnRegisterMLContext(s,n.currentContext),n.currentContext=void 0,n.shouldTransferToMLTensor=!0);let[e,d]=et(s),c=!!t?.enableGraphCapture,p=[],f=[],h=[],m=[];for(let t=0;t<e;t++){let[e,r,o]=tt(s,t);0===e&&De("Can't get an input name."),l.push(e);let a=n.UTF8ToString(e);p.push(a),h.push(0===r?{name:a,isTensor:!1}:{name:a,isTensor:!0,type:Ve(r),shape:o})}for(let t=0;t<d;t++){let[r,o,a]=tt(s,t+e);0===r&&De("Can't get an output name."),u.push(r);let i=n.UTF8ToString(r);f.push(i),m.push(0===o?{name:i,isTensor:!1}:{name:i,isTensor:!0,type:Ve(o),shape:a})}return Ye.set(s,[s,l,u,null,c,!1]),[s,p,f,h,m]}catch(e){throw l.forEach((e=>n._OrtFree(e))),u.forEach((e=>n._OrtFree(e))),0!==s&&0!==n._OrtReleaseSession(s)&&De("Can't release session."),e}finally{n._free(r),0!==a&&0!==n._OrtReleaseSessionOptions(a)&&De("Can't release session options."),i.forEach((e=>n._free(e))),n.unmountExternalData?.()}},nt=e=>{let t=Re(),r=Ye.get(e);if(!r)throw new Error(`cannot release session. invalid session id: ${e}`);let[o,n,s,a,i]=r;a&&(i&&0!==t._OrtClearBoundOutputs(a.handle)&&De("Can't clear bound outputs."),0!==t._OrtReleaseBinding(a.handle)&&De("Can't release IO binding.")),t.jsepOnReleaseSession?.(e),t.webnnOnReleaseSession?.(e),t.webgpuOnReleaseSession?.(e),n.forEach((e=>t._OrtFree(e))),s.forEach((e=>t._OrtFree(e))),0!==t._OrtReleaseSession(o)&&De("Can't release session."),Ye.delete(e)},st=async(e,t,r,o,n,s,a=!1)=>{if(!e)return void t.push(0);let i,l,u=Re(),d=u.PTR_SIZE,c=e[0],p=e[1],f=e[3],h=f;if("string"===c&&("gpu-buffer"===f||"ml-tensor"===f))throw new Error("String tensor is not supported on GPU.");if(a&&"gpu-buffer"!==f)throw new Error(`External buffer must be provided for input/output index ${s} when enableGraphCapture is true.`);if("gpu-buffer"===f){let t=e[2].gpuBuffer;l=Ge(je(c),p);{let e=u.jsepRegisterBuffer;if(!e)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');i=e(o,s,t,l)}}else if("ml-tensor"===f){let t=e[2].mlTensor;l=Ge(je(c),p);let r=u.webnnRegisterMLTensor;if(!r)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');i=r(o,t,je(c),p)}else{let t=e[2];if(Array.isArray(t)){l=d*t.length,i=u._malloc(l),r.push(i);for(let e=0;e<t.length;e++){if("string"!=typeof t[e])throw new TypeError(`tensor data at index ${e} is not a string`);u.setValue(i+e*d,Fe(t[e],r),"*")}}else{let e=u.webnnIsGraphInput,s=u.webnnIsGraphOutput;if("string"!==c&&e&&s){let a=u.UTF8ToString(n);if(e(o,a)||s(o,a)){let e=je(c);l=Ge(e,p),h="ml-tensor";let r=u.webnnCreateTemporaryTensor,n=u.webnnUploadTensor;if(!r||!n)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');let s=await r(o,e,p);n(s,new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),i=s}else l=t.byteLength,i=u._malloc(l),r.push(i),u.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,l),i)}else l=t.byteLength,i=u._malloc(l),r.push(i),u.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,l),i)}}let m=u.stackSave(),w=u.stackAlloc(4*p.length);try{p.forEach(((e,t)=>u.setValue(w+t*d,e,4===d?"i32":"i64")));let e=u._OrtCreateTensor(je(c),i,l,w,p.length,qe(h));0===e&&De(`Can't create tensor for input/output. session=${o}, index=${s}.`),t.push(e)}finally{u.stackRestore(m)}},at=async(e,t,r,o,n,s)=>{let a=Re(),i=a.PTR_SIZE,l=Ye.get(e);if(!l)throw new Error(`cannot run inference. invalid session id: ${e}`);let u=l[0],d=l[1],c=l[2],p=l[3],f=l[4],h=(l[5],t.length),m=o.length,w=0,g=[],y=[],b=[],v=[],S=a.stackSave(),A=a.stackAlloc(h*i),E=a.stackAlloc(h*i),T=a.stackAlloc(m*i),_=a.stackAlloc(m*i);try{[w,g]=Ue(s);for(let o=0;o<h;o++)await st(r[o],y,v,e,d[t[o]],t[o],f);for(let t=0;t<m;t++)await st(n[t],b,v,e,c[o[t]],h+o[t],f);for(let e=0;e<h;e++)a.setValue(A+e*i,y[e],"*"),a.setValue(E+e*i,d[t[e]],"*");for(let e=0;e<m;e++)a.setValue(T+e*i,b[e],"*"),a.setValue(_+e*i,c[o[e]],"*");let l;a.jsepOnRunStart?.(u),a.webnnOnRunStart?.(u),l=await a._OrtRun(u,E,A,h,_,m,T,w),0!==l&&De("failed to call OrtRun().");let S=[],O=[];for(let t=0;t<m;t++){let r=Number(a.getValue(T+t*i,"*"));if(r===b[t]){S.push(n[t]);continue}let s,l=a.stackSave(),u=a.stackAlloc(4*i),d=!1,c=0;try{0!==a._OrtGetTensorData(r,u,u+i,u+2*i,u+3*i)&&De(`Can't access output tensor data on index ${t}.`);let n=4===i?"i32":"i64",l=Number(a.getValue(u,n));c=a.getValue(u+i,"*");let f=a.getValue(u+2*i,"*"),h=Number(a.getValue(u+3*i,n)),m=[];for(let e=0;e<h;e++)m.push(Number(a.getValue(f+e*i,n)));0!==a._OrtFree(f)&&De("Can't free memory for tensor dims.");let w=m.reduce(((e,t)=>e*t),1);s=Ve(l);let g=p?.outputPreferredLocations[o[t]];if("string"===s){if("gpu-buffer"===g||"ml-tensor"===g)throw new Error("String tensor is not supported on GPU.");let e=[];for(let t=0;t<w;t++){let r=a.getValue(c+t*i,"*"),o=a.getValue(c+(t+1)*i,"*"),n=t===w-1?void 0:o-r;e.push(a.UTF8ToString(r,n))}S.push([s,m,e,"cpu"])}else if("gpu-buffer"===g&&w>0){let e=a.jsepGetBuffer;if(!e)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let t=e(c),o=Ge(l,w);if(void 0===o||!He(s))throw new Error(`Unsupported data type: ${s}`);d=!0,S.push([s,m,{gpuBuffer:t,download:a.jsepCreateDownloader(t,o,s),dispose:()=>{0!==a._OrtReleaseTensor(r)&&De("Can't release tensor.")}},"gpu-buffer"])}else if("ml-tensor"===g&&w>0){let t=a.webnnEnsureTensor,o=a.webnnIsGraphInputOutputTypeSupported;if(!t||!o)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(void 0===Ge(l,w)||!Ze(s))throw new Error(`Unsupported data type: ${s}`);if(!o(e,s,!1))throw new Error(`preferredLocation "ml-tensor" for ${s} output is not supported by current WebNN Context.`);let n=await t(e,c,l,m,!1);d=!0,S.push([s,m,{mlTensor:n,download:a.webnnCreateMLTensorDownloader(c,s),dispose:()=>{a.webnnReleaseTensorId(c),a._OrtReleaseTensor(r)}},"ml-tensor"])}else if("ml-tensor-cpu-output"===g&&w>0){let e=a.webnnCreateMLTensorDownloader(c,s)(),t=S.length;d=!0,O.push((async()=>{let o=[t,await e];return a.webnnReleaseTensorId(c),a._OrtReleaseTensor(r),o})()),S.push([s,m,[],"cpu"])}else{let e=new(We(s))(w);new Uint8Array(e.buffer,e.byteOffset,e.byteLength).set(a.HEAPU8.subarray(c,c+e.byteLength)),S.push([s,m,e,"cpu"])}}finally{a.stackRestore(l),"string"===s&&c&&a._free(c),d||a._OrtReleaseTensor(r)}}p&&!f&&(0!==a._OrtClearBoundOutputs(p.handle)&&De("Can't clear bound outputs."),Ye.set(e,[u,d,c,p,f,!1]));for(let[e,t]of await Promise.all(O))S[e][2]=t;return S}finally{a.webnnOnRunEnd?.(u),a.stackRestore(S),y.forEach((e=>a._OrtReleaseTensor(e))),b.forEach((e=>a._OrtReleaseTensor(e))),v.forEach((e=>a._free(e))),0!==w&&a._OrtReleaseRunOptions(w),g.forEach((e=>a._free(e)))}},it=e=>{let t=Re(),r=Ye.get(e);if(!r)throw new Error("invalid session id");let o=r[0],n=t._OrtEndProfiling(o);0===n&&De("Can't get an profile file name."),t._OrtFree(n)},lt=e=>{let t=[];for(let r of e){let e=r[2];!Array.isArray(e)&&"buffer"in e&&t.push(e.buffer)}return t}})),kt=B((()=>{se(),Nt(),xt(),Ft(),ut=()=>!!u.wasm.proxy&&typeof document<"u",ct=!1,pt=!1,ft=!1,wt=new Map,gt=(e,t)=>{let r=wt.get(e);r?r.push(t):wt.set(e,[t])},yt=()=>{if(ct||!pt||ft||!dt)throw new Error("worker not ready")},bt=e=>{switch(e.data.type){case"init-wasm":ct=!1,e.data.err?(ft=!0,mt[1](e.data.err)):(pt=!0,mt[0]()),ht&&(URL.revokeObjectURL(ht),ht=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let t=wt.get(e.data.type);e.data.err?t.shift()[1](e.data.err):t.shift()[0](e.data.out);break}}},vt=async()=>{if(!pt){if(ct)throw new Error("multiple calls to 'initWasm()' detected.");if(ft)throw new Error("previous call to 'initWasm()' failed.");if(ct=!0,ut())return new Promise(((e,t)=>{dt?.terminate(),ve().then((([r,o])=>{try{(dt=o).onerror=e=>t(e),dt.onmessage=bt,mt=[e,t];let n={type:"init-wasm",in:u};if(!n.in.wasm.wasmPaths&&r){let e=fe();e&&(n.in.wasm.wasmPaths=e)}dt.postMessage(n),ht=r}catch(e){t(e)}}),t)}));try{await Ce(u.wasm),await Qe(u),pt=!0}catch(e){throw ft=!0,e}finally{ct=!1}}},St=async e=>{if(ut())return yt(),new Promise(((t,r)=>{gt("init-ep",[t,r]);let o={type:"init-ep",in:{epName:e,env:u}};dt.postMessage(o)}));await Xe(u,e)},At=async e=>ut()?(yt(),new Promise(((t,r)=>{gt("copy-from",[t,r]);let o={type:"copy-from",in:{buffer:e}};dt.postMessage(o,[e.buffer])}))):rt(e),Et=async(e,t)=>{if(ut()){if(t?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return yt(),new Promise(((r,o)=>{gt("create",[r,o]);let n={type:"create",in:{model:e,options:{...t}}},s=[];e instanceof Uint8Array&&s.push(e.buffer),dt.postMessage(n,s)}))}return ot(e,t)},Tt=async e=>{if(ut())return yt(),new Promise(((t,r)=>{gt("release",[t,r]);let o={type:"release",in:e};dt.postMessage(o)}));nt(e)},_t=async(e,t,r,o,n,s)=>{if(ut()){if(r.some((e=>"cpu"!==e[3])))throw new Error("input tensor on GPU is not supported for proxy.");if(n.some((e=>e)))throw new Error("pre-allocated output tensor is not supported for proxy.");return yt(),new Promise(((n,a)=>{gt("run",[n,a]);let i=r,l={type:"run",in:{sessionId:e,inputIndices:t,inputs:i,outputIndices:o,options:s}};dt.postMessage(l,lt(i))}))}return at(e,t,r,o,n,s)},Ot=async e=>{if(ut())return yt(),new Promise(((t,r)=>{gt("end-profiling",[t,r]);let o={type:"end-profiling",in:e};dt.postMessage(o)}));it(e)}})),$t=B((()=>{se(),kt(),It(),ae(),Bt(),Pt=(e,t)=>{switch(e.location){case"cpu":return[e.type,e.dims,e.data,"cpu"];case"gpu-buffer":return[e.type,e.dims,{gpuBuffer:e.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[e.type,e.dims,{mlTensor:e.mlTensor},"ml-tensor"];default:throw new Error(`invalid data location: ${e.location} for ${t()}`)}},Mt=e=>{switch(e[3]){case"cpu":return new _(e[0],e[2],e[1]);case"gpu-buffer":{let t=e[0];if(!He(t))throw new Error(`not supported data type: ${t} for deserializing GPU tensor`);let{gpuBuffer:r,download:o,dispose:n}=e[2];return _.fromGpuBuffer(r,{dataType:t,dims:e[1],download:o,dispose:n})}case"ml-tensor":{let t=e[0];if(!Ze(t))throw new Error(`not supported data type: ${t} for deserializing MLTensor tensor`);let{mlTensor:r,download:o,dispose:n}=e[2];return _.fromMLTensor(r,{dataType:t,dims:e[1],download:o,dispose:n})}default:throw new Error(`invalid data location: ${e[3]}`)}},Ct=class{async fetchModelAndCopyToWasmMemory(e){return At(await Je(e))}async loadModel(e,t){let r;M(),r="string"==typeof e?await this.fetchModelAndCopyToWasmMemory(e):e,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await Et(r,t),C()}async dispose(){return Tt(this.sessionId)}async run(e,t,r){M();let o=[],n=[];Object.entries(e).forEach((e=>{let t=e[0],r=e[1],s=this.inputNames.indexOf(t);if(-1===s)throw new Error(`invalid input '${t}'`);o.push(r),n.push(s)}));let s=[],a=[];Object.entries(t).forEach((e=>{let t=e[0],r=e[1],o=this.outputNames.indexOf(t);if(-1===o)throw new Error(`invalid output '${t}'`);s.push(r),a.push(o)}));let i=o.map(((e,t)=>Pt(e,(()=>`input "${this.inputNames[n[t]]}"`)))),l=s.map(((e,t)=>e?Pt(e,(()=>`output "${this.outputNames[a[t]]}"`)):null)),u=await _t(this.sessionId,n,i,a,l,r),d={};for(let e=0;e<u.length;e++)d[this.outputNames[a[e]]]=s[e]??Mt(u[e]);return C(),d}startProfiling(){}endProfiling(){Ot(this.sessionId)}}})),jt={};N(jt,{OnnxruntimeWebAssemblyBackend:()=>Gt,initializeFlags:()=>Vt,wasmBackend:()=>Wt});var Vt,Gt,Wt,zt=B((()=>{se(),kt(),$t(),Vt=()=>{("number"!=typeof u.wasm.initTimeout||u.wasm.initTimeout<0)&&(u.wasm.initTimeout=0);let e=u.wasm.simd;if("boolean"!=typeof e&&void 0!==e&&"fixed"!==e&&"relaxed"!==e&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${e}". Reset it to \`false\` and ignore SIMD feature checking.`),u.wasm.simd=!1),"boolean"!=typeof u.wasm.proxy&&(u.wasm.proxy=!1),"boolean"!=typeof u.wasm.trace&&(u.wasm.trace=!1),"number"!=typeof u.wasm.numThreads||!Number.isInteger(u.wasm.numThreads)||u.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)u.wasm.numThreads=1;else{let e=typeof navigator>"u"?I("node:os").cpus().length:navigator.hardwareConcurrency;u.wasm.numThreads=Math.min(4,Math.ceil((e||1)/2))}},Wt=new(Gt=class{async init(e){Vt(),await vt(),await St(e)}async createInferenceSessionHandler(e,t){let r=new Ct;return await r.loadModel(e,t),r}})})),Ht={};N(Ht,{InferenceSession:()=>F,TRACE:()=>O,TRACE_FUNC_BEGIN:()=>M,TRACE_FUNC_END:()=>C,Tensor:()=>_,default:()=>Zt,env:()=>u,registerBackend:()=>o}),se(),se(),se();var Zt=ne;{let e=(zt(),k(jt)).wasmBackend;o("cpu",e,10),o("wasm",e,10)}return Object.defineProperty(u.versions,"web",{value:"1.22.0",enumerable:!0}),k(Ht)})();e.exports=o},936:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=936,e.exports=t},485:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.baseAssetPath=void 0;const r="undefined"!=typeof window&&void 0!==window.document?window.document.currentScript:null;let o="/";r&&(o=r.src.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^/]+$/,"/")),t.baseAssetPath=o},973:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultModelFetcher=void 0,t.defaultModelFetcher=e=>fetch(e).then((e=>e.arrayBuffer()))},362:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FrameProcessor=t.validateOptions=t.defaultFrameProcessorOptions=void 0;const o=r(710),n=r(954);t.defaultFrameProcessorOptions={positiveSpeechThreshold:.3,negativeSpeechThreshold:.25,preSpeechPadMs:800,redemptionMs:1400,minSpeechMs:400,submitUserSpeechOnPause:!1},t.validateOptions=function(e){(e.positiveSpeechThreshold<0||e.positiveSpeechThreshold>1)&&o.log.error("positiveSpeechThreshold should be a number between 0 and 1"),(e.negativeSpeechThreshold<0||e.negativeSpeechThreshold>e.positiveSpeechThreshold)&&o.log.error("negativeSpeechThreshold should be between 0 and positiveSpeechThreshold"),e.preSpeechPadMs<0&&o.log.error("preSpeechPadMs should be positive"),e.redemptionMs<0&&o.log.error("redemptionMs should be positive"),e.minSpeechMs<0&&o.log.error("minSpeechMs should be positive")};const s=e=>{const t=e.reduce(((e,t)=>(e.push(e.at(-1)+t.length),e)),[0]),r=new Float32Array(t.at(-1));return e.forEach(((e,o)=>{const n=t[o];r.set(e,n)})),r};function a(e,t){return{redemptionFrames:Math.floor(e.redemptionMs/t),preSpeechPadFrames:Math.floor(e.preSpeechPadMs/t),minSpeechFrames:Math.floor(e.minSpeechMs/t)}}t.FrameProcessor=class{constructor(e,t,r,o){this.modelProcessFunc=e,this.modelResetFunc=t,this.options=r,this.msPerFrame=o,this.speaking=!1,this.redemptionCounter=0,this.speechFrameCount=0,this.active=!1,this.speechRealStartFired=!1,this.setOptions=e=>{this.options={...this.options,...e};const{redemptionFrames:t,preSpeechPadFrames:r,minSpeechFrames:o}=a(this.options,this.msPerFrame);this.redemptionFrames=t,this.preSpeechPadFrames=r,this.minSpeechFrames=o},this.reset=()=>{this.speaking=!1,this.speechRealStartFired=!1,this.audioBuffer=[],this.modelResetFunc(),this.redemptionCounter=0,this.speechFrameCount=0},this.pause=e=>{this.active=!1,this.options.submitUserSpeechOnPause?this.endSegment(e):this.reset()},this.resume=()=>{this.active=!0},this.endSegment=e=>{const t=this.audioBuffer;this.audioBuffer=[];const r=this.speaking;if(this.reset(),r)if(t.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const r=s(t.map((e=>e.frame)));e({msg:n.Message.SpeechEnd,audio:r})}else e({msg:n.Message.VADMisfire});return{}},this.process=async(e,t)=>{if(!this.active)return;const r=await this.modelProcessFunc(e),o=r.isSpeech>=this.options.positiveSpeechThreshold;if(t({probs:r,msg:n.Message.FrameProcessed,frame:e}),this.audioBuffer.push({frame:e,isSpeech:o}),o&&(this.speechFrameCount++,this.redemptionCounter=0),o&&!this.speaking&&(this.speaking=!0,t({msg:n.Message.SpeechStart})),this.speaking&&this.speechFrameCount===this.minSpeechFrames&&!this.speechRealStartFired&&(this.speechRealStartFired=!0,t({msg:n.Message.SpeechRealStart})),r.isSpeech<this.options.negativeSpeechThreshold&&this.speaking&&++this.redemptionCounter>=this.redemptionFrames){this.redemptionCounter=0,this.speechFrameCount=0,this.speaking=!1,this.speechRealStartFired=!1;const e=this.audioBuffer;if(this.audioBuffer=[],e.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const r=s(e.map((e=>e.frame)));t({msg:n.Message.SpeechEnd,audio:r})}else t({msg:n.Message.VADMisfire})}if(!this.speaking){for(;this.audioBuffer.length>this.preSpeechPadFrames;)this.audioBuffer.shift();this.speechFrameCount=0}},this.audioBuffer=[];const{redemptionFrames:i,preSpeechPadFrames:l,minSpeechFrames:u}=a(this.options,this.msPerFrame);this.redemptionFrames=i,this.preSpeechPadFrames=l,this.minSpeechFrames=u,this.reset()}}},710:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.log=void 0;const r=e=>t=>{console.log(`VAD | ${e} >`,t)};t.log={error:r("error"),debug:r("debug"),warn:r("warn")}},954:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){e.AudioFrame="AUDIO_FRAME",e.SpeechStart="SPEECH_START",e.VADMisfire="VAD_MISFIRE",e.SpeechEnd="SPEECH_END",e.SpeechStop="SPEECH_STOP",e.SpeechRealStart="SPEECH_REAL_START",e.FrameProcessed="FRAME_PROCESSED"}(r||(t.Message=r={}))},650:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},559:function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,n)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=t.SileroLegacy=void 0,n(r(650),t);var s=r(143);Object.defineProperty(t,"SileroLegacy",{enumerable:!0,get:function(){return s.SileroLegacy}});var a=r(508);Object.defineProperty(t,"SileroV5",{enumerable:!0,get:function(){return a.SileroV5}})},143:(e,t,r)=>{"use strict";var o;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroLegacy=void 0;const n=r(710);class s{constructor(e,t,r,o,n){this.ortInstance=e,this._session=t,this._h=r,this._c=o,this._sr=n,this.reset_state=()=>{const e=Array(128).fill(0);this._h=new this.ortInstance.Tensor("float32",e,[2,1,64]),this._c=new this.ortInstance.Tensor("float32",e,[2,1,64])},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),h:this._h,c:this._c,sr:this._sr},r=await this._session.run(t);this._h=r.hn,this._c=r.cn;const[o]=r.output?.data;return{notSpeech:1-o,isSpeech:o}},this.release=async()=>{await this._session.release(),this._h.dispose(),this._c.dispose(),this._sr.dispose()}}}t.SileroLegacy=s,o=s,s.new=async(e,t)=>{n.log.debug("initializing vad");const r=await t(),s=await e.InferenceSession.create(r),a=new e.Tensor("int64",[16000n]),i=Array(128).fill(0),l=new e.Tensor("float32",i,[2,1,64]),u=new e.Tensor("float32",i,[2,1,64]);return n.log.debug("vad is initialized"),new o(e,s,l,u,a)}},508:(e,t,r)=>{"use strict";var o;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=void 0;const n=r(710);function s(e){const t=Array(256).fill(0);return new e.Tensor("float32",t,[2,1,128])}class a{constructor(e,t,r,o){this._session=e,this._state=t,this._sr=r,this.ortInstance=o,this.reset_state=()=>{this._state=s(this.ortInstance)},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),state:this._state,sr:this._sr},r=await this._session.run(t);if(!r.stateN)throw new Error("No state from model");if(this._state=r.stateN,!r.output?.data)throw new Error("No output from model");const o=r.output.data[0];if("number"!=typeof o)throw new Error("Weird output data");return{notSpeech:1-o,isSpeech:o}},this.release=async()=>{await this._session.release(),this._state.dispose(),this._sr.dispose()}}}t.SileroV5=a,o=a,a.new=async(e,t)=>{n.log.debug("Loading VAD...");const r=await t(),a=await e.InferenceSession.create(r),i=new e.Tensor("int64",[16000n]),l=s(e);return n.log.debug("...finished loading VAD"),new o(a,l,i,e)}},202:function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,n)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&o(t,e,r);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.NonRealTimeVAD=t.defaultNonRealTimeVADOptions=void 0;const a=s(r(656)),i=r(485),l=r(973),u=r(362),d=r(954),c=r(559),p=r(825);t.defaultNonRealTimeVADOptions={...u.defaultFrameProcessorOptions,modelURL:i.baseAssetPath+"silero_vad_legacy.onnx",modelFetcher:l.defaultModelFetcher},t.NonRealTimeVAD=class{static async new(e={}){const r={...t.defaultNonRealTimeVADOptions,...e};(0,u.validateOptions)(r),void 0!==r.ortConfig&&r.ortConfig(a);const o=()=>r.modelFetcher(r.modelURL),n=await c.SileroLegacy.new(a,o),s=new u.FrameProcessor(n.process,n.reset_state,{positiveSpeechThreshold:r.positiveSpeechThreshold,negativeSpeechThreshold:r.negativeSpeechThreshold,redemptionMs:r.redemptionMs,preSpeechPadMs:r.preSpeechPadMs,minSpeechMs:r.minSpeechMs,submitUserSpeechOnPause:r.submitUserSpeechOnPause},96);return s.resume(),new this(o,a,r,s)}constructor(e,t,r,o){this.modelFetcher=e,this.ort=t,this.options=r,this.frameProcessor=o,this.frameSamples=1536}async*run(e,t){const r={nativeSampleRate:t,targetSampleRate:16e3,targetFrameSize:this.frameSamples},o=new p.Resampler(r);let n=0,s=0,a=0;for await(const t of o.stream(e)){const e=[];await this.frameProcessor.process(t,(t=>{e.push(t)}));for(const t of e)switch(t.msg){case d.Message.SpeechStart:n=a*this.frameSamples/16;break;case d.Message.SpeechEnd:s=(a+1)*this.frameSamples/16,yield{audio:t.audio,start:n,end:s}}a++}const i=[];this.frameProcessor.endSegment((e=>{i.push(e)}));for(const e of i)e.msg===d.Message.SpeechEnd&&(yield{audio:e.audio,start:n,end:a*this.frameSamples/16})}}},746:function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,n)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&o(t,e,r);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.MicVAD=t.getDefaultRealTimeVADOptions=t.ort=t.DEFAULT_MODEL=void 0;const a=s(r(647)),i=r(973),l=r(362),u=r(710),d=r(954),c=r(559),p=r(825);t.DEFAULT_MODEL="legacy",t.ort=a,t.getDefaultRealTimeVADOptions=e=>({...l.defaultFrameProcessorOptions,onFrameProcessed:()=>{},onVADMisfire:()=>{u.log.debug("VAD misfire")},onSpeechStart:()=>{u.log.debug("Detected speech start")},onSpeechEnd:()=>{u.log.debug("Detected speech end")},onSpeechRealStart:()=>{u.log.debug("Detected real speech start")},baseAssetPath:"./",onnxWASMBasePath:"./",model:e,workletOptions:{},getStream:async()=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),pauseStream:async e=>{e.getTracks().forEach((e=>{e.stop()}))},resumeStream:async()=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),ortConfig:e=>{e.env.logLevel="error"},startOnLoad:!0,processorType:"auto"});class f{constructor(e,t,r,o,n=!1,s=null,a=null,i=null,l=null,c=null,f=null,h="uninitialized",m=!1){this.options=e,this.frameProcessor=t,this.model=r,this.frameSamples=o,this.listening=n,this.errored=s,this._stream=a,this._audioContext=i,this._vadNode=l,this._mediaStreamAudioSourceNode=c,this._audioProcessorAdapterType=f,this.initializationState=h,this.ownsAudioContext=m,this.getAudioInstances=()=>{if(null===this._stream||null===this._audioContext||null==this._vadNode||null==this._mediaStreamAudioSourceNode)throw new Error("MicVAD has null stream, audio context, or processor adapter");return{stream:this._stream,audioContext:this._audioContext,vadNode:this._vadNode,mediaStreamAudioSourceNode:this._mediaStreamAudioSourceNode}},this.setErrored=e=>{this.initializationState="errored",this.errored=e},this.start=async()=>{switch(this.initializationState){case"uninitialized":u.log.debug("initializing micVAD"),this.initializationState="initializing",this.frameProcessor.resume();try{this._stream=await this.options.getStream()}catch(e){throw e instanceof Error?this.setErrored(e.message):this.setErrored(String(e)),e}if(this.options.audioContext?(console.log("using custom audio context"),this._audioContext=this.options.audioContext):(console.log("using default audio context"),this._audioContext=new AudioContext,this.ownsAudioContext=!0),!this._audioContext)throw this.setErrored("Audio context is null"),Error("Audio context is null");switch(this._audioProcessorAdapterType="auto"==this.options.processorType?"audioWorklet"in this._audioContext&&"function"==typeof AudioWorkletNode?"AudioWorklet":"ScriptProcessor":this.options.processorType,this._audioProcessorAdapterType){case"AudioWorklet":this._vadNode=await async function(e,t,r,o,n){await r.audioWorklet.addModule(e),t.processorOptions={...t.processorOptions??{},frameSamples:o};const s=new AudioWorkletNode(r,"vad-helper-worklet",t);return s.port.onmessage=async e=>{const t=e.data;if("object"==typeof t&&t&&"message"in t)switch(t.message){case d.Message.AudioFrame:{if(!("data"in t&&t.data instanceof ArrayBuffer))return void console.log("Audio frame message has no data");const e=new Float32Array(t.data);await n(e);break}}else console.error("Invalid message event",t)},s}(this.options.baseAssetPath+"vad.worklet.bundle.min.js",this.options.workletOptions,this._audioContext,this.frameSamples,this.processFrame);break;case"ScriptProcessor":this._vadNode=await async function(e,t,r){const o=new p.Resampler({nativeSampleRate:e.sampleRate,targetSampleRate:16e3,targetFrameSize:t});u.log.debug("using script processor");const n=e.createScriptProcessor(4096,1,1);let s=!1;return n.onaudioprocess=async e=>{if(!s){s=!0;try{const t=e.inputBuffer.getChannelData(0);e.outputBuffer.getChannelData(0).fill(0);const n=o.process(t);for(const e of n)await r(e)}catch(e){console.error("Error processing audio:",e)}finally{s=!1}}},n.connect(e.destination),n}(this._audioContext,this.frameSamples,this.processFrame);break;default:throw new Error(`Unsupported audio processor adapter type: ${this._audioProcessorAdapterType}`)}this._mediaStreamAudioSourceNode=new MediaStreamAudioSourceNode(this._audioContext,{mediaStream:this._stream}),this._mediaStreamAudioSourceNode.connect(this._vadNode),u.log.debug("started micVAD"),this.listening=!0,this.initializationState="initialized";break;case"initializing":u.log.warn("start called while initializing");break;case"initialized":{if(this.listening)return;this.listening=!0,this.frameProcessor.resume();const{stream:e,audioContext:t,vadNode:r}=this.getAudioInstances();this._stream=await this.options.resumeStream(e);const o=new MediaStreamAudioSourceNode(t,{mediaStream:this._stream});this._mediaStreamAudioSourceNode=o,o.connect(r);break}case"destroyed":u.log.warn("start called after destroyed");break;case"errored":u.log.error("start called after errored");break;default:u.log.warn("weird initialization state")}},this.pause=async()=>{if(!this.listening)return;this.listening=!1;const{stream:e,mediaStreamAudioSourceNode:t}=this.getAudioInstances();await this.options.pauseStream(e),t.disconnect(),this.frameProcessor.pause(this.handleFrameProcessorEvent)},this.destroy=async()=>{u.log.debug("destroy called"),this.initializationState="destroyed";const{vadNode:e}=this.getAudioInstances();e instanceof AudioWorkletNode&&e.port.postMessage(d.Message.SpeechStop),this.listening&&await this.pause(),await this.model.release(),this.ownsAudioContext&&await(this._audioContext?.close())},this.setOptions=e=>{this.frameProcessor.setOptions(e)},this.processFrame=async e=>{await this.frameProcessor.process(e,this.handleFrameProcessorEvent)},this.handleFrameProcessorEvent=e=>{switch(e.msg){case d.Message.FrameProcessed:this.options.onFrameProcessed(e.probs,e.frame);break;case d.Message.SpeechStart:this.options.onSpeechStart();break;case d.Message.SpeechRealStart:this.options.onSpeechRealStart();break;case d.Message.VADMisfire:this.options.onVADMisfire();break;case d.Message.SpeechEnd:this.options.onSpeechEnd(e.audio)}}}static async new(e={}){const r={...(0,t.getDefaultRealTimeVADOptions)(e.model??t.DEFAULT_MODEL),...e};(0,l.validateOptions)(r),t.ort.env.wasm.wasmPaths=r.onnxWASMBasePath,void 0!==r.ortConfig&&r.ortConfig(t.ort);const o="v5"===r.model?"silero_vad_v5.onnx":"silero_vad_legacy.onnx",n=r.baseAssetPath+o,s="v5"===r.model?c.SileroV5.new:c.SileroLegacy.new;let a;try{a=await s(t.ort,(()=>(0,i.defaultModelFetcher)(n)))}catch(e){throw console.error(`Encountered an error while loading model file ${n}`),e}const u="v5"===r.model?512:1536,d=u/16,p=new l.FrameProcessor(a.process,a.reset_state,{positiveSpeechThreshold:r.positiveSpeechThreshold,negativeSpeechThreshold:r.negativeSpeechThreshold,redemptionMs:r.redemptionMs,preSpeechPadMs:r.preSpeechPadMs,minSpeechMs:r.minSpeechMs,submitUserSpeechOnPause:r.submitUserSpeechOnPause},d),h=new f(r,p,a,u);if(r.startOnLoad)try{await h.start()}catch(e){throw console.error("Error starting micVad",e),e}return h}}t.MicVAD=f},825:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Resampler=void 0;const o=r(710);t.Resampler=class{constructor(e){this.options=e,this.process=e=>{const t=[];for(const r of e)for(this.inputBuffer.push(r);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();t.push(e)}return t},e.nativeSampleRate<16e3&&o.log.error("nativeSampleRate is too low. Should have 16000 = targetSampleRate <= nativeSampleRate"),this.inputBuffer=[]}async*stream(e){for(const t of e)for(this.inputBuffer.push(t);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();yield e}}hasEnoughDataForFrame(){return this.inputBuffer.length*this.options.targetSampleRate/this.options.nativeSampleRate>=this.options.targetFrameSize}generateOutputFrame(){const e=new Float32Array(this.options.targetFrameSize);let t=0,r=0;for(;t<this.options.targetFrameSize;){let o=0,n=0;for(;r<Math.min(this.inputBuffer.length,(t+1)*this.options.nativeSampleRate/this.options.targetSampleRate);){const e=this.inputBuffer[r];void 0!==e&&(o+=e,n++),r++}e[t]=o/n,t++}return this.inputBuffer=this.inputBuffer.slice(r),e}}},787:(e,t)=>{"use strict";function r(e,t,r){for(let o=0;o<r.length;o++)e.setUint8(t+o,r.charCodeAt(o))}Object.defineProperty(t,"__esModule",{value:!0}),t.audioFileToArray=t.encodeWAV=t.arrayBufferToBase64=t.minFramesForTargetMS=void 0,t.minFramesForTargetMS=function(e,t,r=16e3){return Math.ceil(e*r/1e3/t)},t.arrayBufferToBase64=function(e){const t=new Uint8Array(e),r=t.byteLength,o=new Array(r);for(let e=0;e<r;e++){const r=t[e];if(void 0===r)break;o[e]=String.fromCharCode(r)}return btoa(o.join(""))},t.encodeWAV=function(e,t=3,o=16e3,n=1,s=32){const a=s/8,i=n*a,l=new ArrayBuffer(44+e.length*a),u=new DataView(l);return r(u,0,"RIFF"),u.setUint32(4,36+e.length*a,!0),r(u,8,"WAVE"),r(u,12,"fmt "),u.setUint32(16,16,!0),u.setUint16(20,t,!0),u.setUint16(22,n,!0),u.setUint32(24,o,!0),u.setUint32(28,o*i,!0),u.setUint16(32,i,!0),u.setUint16(34,s,!0),r(u,36,"data"),u.setUint32(40,e.length*a,!0),1===t?function(e,t,r){for(let o=0;o<r.length;o++,t+=2){const n=Math.max(-1,Math.min(1,r[o]));e.setInt16(t,n<0?32768*n:32767*n,!0)}}(u,44,e):function(e,t,r){for(let o=0;o<r.length;o++,t+=4)e.setFloat32(t,r[o],!0)}(u,44,e),l},t.audioFileToArray=async function(e){const t=new OfflineAudioContext(1,1,44100),r=new FileReader;let o=null;if(await new Promise((n=>{r.addEventListener("loadend",(()=>{const e=r.result;t.decodeAudioData(e,(e=>{o=e,t.startRendering().then((()=>{console.log("Rendering completed successfully"),n()})).catch((e=>{console.error("Rendering failed: ",e)}))}),(e=>{console.log("Error with decoding audio data: ",e)}))})),r.readAsArrayBuffer(e)})),null===o)throw Error("some shit");const n=o,s=new Float32Array(n.length);for(let e=0;e<n.length;e++)for(let t=0;t<n.numberOfChannels;t++){const r=n.getChannelData(t)[e],o=s[e];if(void 0===r||void 0===o)throw new Error("sample or out[i] is undefined");s[e]=o+r}return{audio:s,sampleRate:n.sampleRate}}},656:t=>{"use strict";t.exports=e}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var s=r[e]={exports:{}};return t[e].call(s.exports,s,s.exports,o),s.exports}o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};return(()=>{"use strict";var e=n;Object.defineProperty(e,"__esModule",{value:!0}),e.getDefaultRealTimeVADOptions=e.MicVAD=e.DEFAULT_MODEL=e.utils=e.NonRealTimeVAD=e.Message=e.FrameProcessor=e.defaultModelFetcher=e.baseAssetPath=void 0;var t=o(485);Object.defineProperty(e,"baseAssetPath",{enumerable:!0,get:function(){return t.baseAssetPath}});var r=o(973);Object.defineProperty(e,"defaultModelFetcher",{enumerable:!0,get:function(){return r.defaultModelFetcher}});var s=o(362);Object.defineProperty(e,"FrameProcessor",{enumerable:!0,get:function(){return s.FrameProcessor}});var a=o(954);Object.defineProperty(e,"Message",{enumerable:!0,get:function(){return a.Message}});var i=o(202);Object.defineProperty(e,"NonRealTimeVAD",{enumerable:!0,get:function(){return i.NonRealTimeVAD}});const l=o(787);e.utils={audioFileToArray:l.audioFileToArray,minFramesForTargetMS:l.minFramesForTargetMS,arrayBufferToBase64:l.arrayBufferToBase64,encodeWAV:l.encodeWAV};var u=o(746);Object.defineProperty(e,"DEFAULT_MODEL",{enumerable:!0,get:function(){return u.DEFAULT_MODEL}}),Object.defineProperty(e,"MicVAD",{enumerable:!0,get:function(){return u.MicVAD}}),Object.defineProperty(e,"getDefaultRealTimeVADOptions",{enumerable:!0,get:function(){return u.getDefaultRealTimeVADOptions}})})(),n})()));
|
frontend/vendor/vad/silero_vad_v5.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2623a2953f6ff3d2c1e61740c6cdb7168133479b267dfef114a4a3cc5bdd788f
|
| 3 |
+
size 2327524
|
frontend/vendor/vad/vad.worklet.bundle.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
(()=>{"use strict";var e={710:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.log=void 0;const s=e=>t=>{console.log(`VAD | ${e} >`,t)};t.log={error:s("error"),debug:s("debug"),warn:s("warn")}},954:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){e.AudioFrame="AUDIO_FRAME",e.SpeechStart="SPEECH_START",e.VADMisfire="VAD_MISFIRE",e.SpeechEnd="SPEECH_END",e.SpeechStop="SPEECH_STOP",e.SpeechRealStart="SPEECH_REAL_START",e.FrameProcessed="FRAME_PROCESSED"}(s||(t.Message=s={}))},825:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Resampler=void 0;const r=s(710);t.Resampler=class{constructor(e){this.options=e,this.process=e=>{const t=[];for(const s of e)for(this.inputBuffer.push(s);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();t.push(e)}return t},e.nativeSampleRate<16e3&&r.log.error("nativeSampleRate is too low. Should have 16000 = targetSampleRate <= nativeSampleRate"),this.inputBuffer=[]}async*stream(e){for(const t of e)for(this.inputBuffer.push(t);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();yield e}}hasEnoughDataForFrame(){return this.inputBuffer.length*this.options.targetSampleRate/this.options.nativeSampleRate>=this.options.targetFrameSize}generateOutputFrame(){const e=new Float32Array(this.options.targetFrameSize);let t=0,s=0;for(;t<this.options.targetFrameSize;){let r=0,o=0;for(;s<Math.min(this.inputBuffer.length,(t+1)*this.options.nativeSampleRate/this.options.targetSampleRate);){const e=this.inputBuffer[s];void 0!==e&&(r+=e,o++),s++}e[t]=r/o,t++}return this.inputBuffer=this.inputBuffer.slice(s),e}}}},t={};function s(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,s),a.exports}(()=>{const e=s(710),t=s(954),r=s(825);class o extends AudioWorkletProcessor{constructor(s){super(),this._stopProcessing=!1,this.options=s.processorOptions,this.port.onmessage=s=>{s.data===t.Message.SpeechStop&&(e.log.debug("Worklet received speech stop message"),this._stopProcessing=!0)},this.resampler=new r.Resampler({nativeSampleRate:sampleRate,targetSampleRate:16e3,targetFrameSize:this.options.frameSamples})}process(e){if(this._stopProcessing)return!1;const s=e[0];if(void 0===s)return!0;const r=s[0];if(void 0===r)return!0;const o=this.resampler.process(r);for(const e of o)this.port.postMessage({message:t.Message.AudioFrame,data:e.buffer},[e.buffer]);return!0}}registerProcessor("vad-helper-worklet",o)})()})();
|